请问C++ SDK一个问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:56:21
HINSTANCE hin;和 HANDLE hand;
这两个实例化 有什么区别?
哪些场合 用HINSTANCE
哪些场合 用HANDLE
哪些场合 都可以用?
请各位详细回答 小菜再次谢过了

HINSTANCE 这个其实是 handle instance 即 实例句柄
而HANDLE这个 意思是句柄, 你可以理解为它是所有的句柄的总称

因为句柄包括很多种啊 像 窗口句柄(HWND) ,实例句柄(HINSTANCE)
光标句柄(HCURSOR) 图标句柄(HICON)

可以看到 以H 开头的都是句柄类型的, 后边的英文可以体现具体它是哪一种句柄

具体什么时候用哪一个, 这个要看函数是如何规定的了
比如一个API函数, 它返回值是 句柄类型的, 那它可能是HWND 也可能是HINSTANCE 还可能是HCURSOR 这些在MSDN中API函数的介绍中都有明确的说明,你自己跟本不必再意到底该用哪个, 按照函数规定的去写 就可以啦

HANDLE
Handle to an object.
This type is declared in WinNT.h as follows:
typedef PVOID HANDLE;

HINSTANCE
Handle to an instance.
This type is declared in WinDef.h as follows:
typedef HANDLE HINSTANCE;

2者本质上是一样的,区别在于object和instance
我只能帮忙提供这些信息,希望有帮助

二楼说的蛮好的

本质上,所有句柄都是HANDLE的typedef,而HANDLE又是void*。
微软在抽象层面上搞出了这么多不同的HANDLE。
赤裸裸的HANDLE是执行体对象(也有叫内核对象)的句柄。它的值是执行体对象的一个索引,每个进程有自己的执行体对象索引表

HINSTANCE及HMODULE都是一个模块(exe或dll或其它)的句柄。它的值就是模块的基地址。

HWND是一个窗口用户对象的句柄。它的值也是一个索引,不过是在win32k.sys创建的一个全局索引表里的索引。