Win32API主函数中hInstance的含义

时间:2015-01-16 15:02:08

标签: winapi

以下是公平的说法(即使它在技术上可能不完全正确):

传递给win32api应用程序的main函数的hInstance参数用于告诉main方法:亲爱的main方法,您内部的代码仅对应用程序的实例xy有效。

因此,如果我打开WORD两次并最小化其中一个窗口,则调用SAME主函数,但是通过hInstance参数,WORD的两个实例是分开的吗?

对于需要hInstance参数的任何其他函数也是如此。

感谢您的更正和帮助!

1 个答案:

答案 0 :(得分:0)

不是真的。虚拟内存将同一程序的实例分开。每个实例都没有平均值(除了特定的api调用)来访问对方的内存,它们是完全孤立的。

HINSTANCE只是用于识别其他WINAPI调用的应用程序的句柄。但实际上,它甚至不能从其他实例中识别您的应用程序,而是从应用程序内的其他 applications 可执行文件中识别它(如DLL)(应用程序中的DLL将具有自己的HINSTANCE,通常作为HMODULE给出,这是相同的)。如果您运行程序两次,则两者的HINSTANCE可能相同。

作为旁注,HINSTANCE实际上是指向可执行文件的内存映像的指针。因此,您可以执行printf("%s\n",hInstance);,它将始终打印MZ?(?取决于您的区域设置),因为Windows可执行文件始终以“MZ \ x90 \ x00”开头。