Winapi Win32API主函数中hInstance的含义

Winapi Win32API主函数中hInstance的含义,winapi,Winapi,是hInstance参数,用于告诉main方法中的代码仅对应用程序的实例xy有效 因此,如果我打开WORD两次并最小化其中一个窗口,会调用相同的主函数,但通过hInstance参数,WORD的两个实例会分开吗 对于需要hInstance参数的任何其他函数也是如此 感谢您的更正和帮助 不太可能。同一程序的实例由虚拟内存隔开。每个实例都没有办法(除了特定的api调用)访问另一个实例的内存,它们是完全隔离的 HINSTANCE只是一个句柄,用于为其他WINAPI调用标识您的应用程序。但实际上,它甚至不

是hInstance参数,用于告诉main方法中的代码仅对应用程序的实例xy有效

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

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


感谢您的更正和帮助

不太可能。同一程序的实例由虚拟内存隔开。每个实例都没有办法(除了特定的api调用)访问另一个实例的内存,它们是完全隔离的

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


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

您有一个,其中Y是“我需要知道hInstance做什么”(这一点已解释,并且)。你能解释一下你原来的问题X吗?这样你就能得到你需要的答案了?不,对于每个进程,都会加载一个新的可执行文件实例,因此不,执行的代码不同(如:相同的内存位置)。不,这根本不对。它只是进程可执行文件的
HMODULE
。您需要一本更新的书。你写的这本书是为16位Windows编写的。最初的问题是:为什么我需要向函数传递hInstance?我读的课文给我的印象是,我要实现我在问题中描述的目标。但我显然误解了这一点:DWhy,你没问这个问题吗?啊,这更像是:我做了一个winAPI调用,为了让被调用的代码知道它是通过哪个实例调用的,我传递了hInstance?因此,要区分代码是由我的程序调用还是由我使用的dll调用?@user3813234实际上,更重要的是识别进程内的可执行文件。操作系统管理进程,它已经知道是什么进程和可执行文件进行调用。HINSTANCE/HMODULE用于与特定可执行文件相关的调用,如
GetProcAddress
(从应用程序内的特定可执行文件获取proc地址)或
FindResource
(从特定可执行文件查找resource)。这两个API调用需要HINSTANCE,因为它以特定的可执行文件为目标。大多数WINAPI调用没有HINSTANCE参数。@ElderBug:DLL只能是资源,不能包含任何可执行代码。你还会称它为可执行文件吗?@ElderBug:入口点是可选的。例如,aero.msstyles是一个仅限资源的DLL,其中包含供aero主题使用的资源。此DLL中绝对没有代码。在Dependency Walker中打开它,您将自己看到。您还可以阅读图像标题并观察相同的内容。它之所以被称为“资源”是有原因的。@ElderBug:DLL不需要有特定的扩展名。aero.msstyles是一个DLL文件,它将使用
LoadLibraryEx
加载。不能使用
LoadLibrary
加载仅限资源的DLL。仅限资源的DLL没有入口点,不需要包含代码(
dumpbin/SECTION:.text aero.msstyles
)。或者简单地跟随,并注意没有文本部分存在。换句话说:没有代码。