如何从DLL获取HINSTANCE?

ana*_*and 16 winapi visual-c++

我在VC++中创建了一个DLL作为Win32项目

DLLMAIN函数是

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

现在我需要DLL的HINSTANCE,需要传递给Win32函数.

HMODULE和HINSTANCE相同吗?

我怎样才能获得HINSTANCE?

Swi*_*iss 23

Windows Via C/C++ [1]一书的摘录

注意事实证明,HMODULEHINSTANCE是完全相同的.如果函数的文档指示需要HMODULE,则可以传递HINSTANCE,反之亦然.有两种数据类型,因为在16位Windows HMODULEHINSTANCE中识别出不同的东西

[1] Richter,Jeffery和Nasarre,Christophe,Windows Via C/C++,5th ed,Redmond:Microsoft Press 2008,pp.74

  • 更多信息:http://blogs.msdn.com/oldnewthing/archive/2004/06/14/155107.aspx (3认同)
  • Win32,HINSTANCE和HMODULE都只是模块的基地址. (2认同)

not*_*row 5

我认为这些都是一样的。如果您想要运行进程(exe)的实例,您应该使用

GetModuleHandle(NULL);
Run Code Online (Sandbox Code Playgroud)

  • 这不会返回 **DLL** 的“HMODULE”,而这正是 OP 所要求的。 (4认同)

Ale*_* V. 5

特定于Microsoft链接器

#include "windows.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#pragma warning(disable: 4047)
HINSTANCE hInstance = (HINSTANCE)&__ImageBase;
#pragma warning(default: 4047)
Run Code Online (Sandbox Code Playgroud)