Win32API 主函数中 hInstance 的含义
meaning of the hInstance in Win32API main-function
那里的 hInstance 参数是否告诉主方法其中的代码仅对应用程序的实例 xy 有效。
因此,如果我打开 WORD 两次并最小化其中一个 windows,将调用相同的主函数,但是通过 hInstance 参数,WORD 的两个实例保持分开?
对于需要 hInstance 参数的任何其他函数也是如此。
感谢指正和帮助!
不是真的。同一程序的实例由虚拟内存分开。每个实例都无法访问对方的内存(特定 api 调用除外),它们是完全隔离的。
HINSTANCE 只是一个句柄,用于为其他 WINAPI 调用识别您的应用程序。但实际上,它甚至不是从其他实例中识别您的应用程序,而是从您应用程序中的其他 applications 可执行文件中识别它,例如 DLL(您应用程序中的 DLL 将有自己的HINSTANCE,通常作为一个 HMODULE 给出,这是相同的)。如果你 运行 你的程序两次,HINSTANCE 可能是相同的。
附带说明一下,HINSTANCE 实际上是一个指向可执行文件内存映像的指针。因此你可以做 printf("%s\n",hInstance);
,它总是打印 MZ?
(?取决于你的语言环境),因为 windows 可执行文件总是以 "MZ\x90\x00".[=12= 开头]
那里的 hInstance 参数是否告诉主方法其中的代码仅对应用程序的实例 xy 有效。
因此,如果我打开 WORD 两次并最小化其中一个 windows,将调用相同的主函数,但是通过 hInstance 参数,WORD 的两个实例保持分开?
对于需要 hInstance 参数的任何其他函数也是如此。
感谢指正和帮助!
不是真的。同一程序的实例由虚拟内存分开。每个实例都无法访问对方的内存(特定 api 调用除外),它们是完全隔离的。
HINSTANCE 只是一个句柄,用于为其他 WINAPI 调用识别您的应用程序。但实际上,它甚至不是从其他实例中识别您的应用程序,而是从您应用程序中的其他 applications 可执行文件中识别它,例如 DLL(您应用程序中的 DLL 将有自己的HINSTANCE,通常作为一个 HMODULE 给出,这是相同的)。如果你 运行 你的程序两次,HINSTANCE 可能是相同的。
附带说明一下,HINSTANCE 实际上是一个指向可执行文件内存映像的指针。因此你可以做 printf("%s\n",hInstance);
,它总是打印 MZ?
(?取决于你的语言环境),因为 windows 可执行文件总是以 "MZ\x90\x00".[=12= 开头]