c++ - Winapi:插件中的createWindow

标签 c++ winapi visual-c++

我正在开发一个插件(一个由其他应用程序加载的 dll)。有一个特殊函数应该返回 HWND 以便应用程序可以显示对话框。问题是我不知道从哪里可以获得 hInstance(它没有作为参数传递给函数)。

看来我不明白什么,我对所有这些东西都是新手,如果问题很愚蠢,请原谅。

UPD:尝试使用 getModuleHandle 获取 hInstance:

void* createLoginDialog() {
    HINSTANCE hIns = (HINSTANCE) GetModuleHandle(L"comapping");
    HWND hWnd = CreateWindow(L"Popup",
                        L"Enter login",
                        WS_POPUP,
                        20,
                        20,
                        20,
                        20,
                        NULL,
                        NULL,
                        hIns,
                        NULL);
    return hWnd;
}

我仍然遇到访问冲突。

最佳答案

几种获取方式:

  • 传递给 DllMain() 入口点的第一个参数,转换为 HINSTANCE
  • GetModuleHandle() 使用您的 DLL 名称,转换为 HINSTANCE
  • VirtualQuery(),传递函数的地址。将返回的 MEMORY_BASIC_INFORMATION.BaseAddress 转换为 HINSTANCE。适用于 32 位和 64 位版本的 Windows。

关于c++ - Winapi:插件中的createWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160462/

相关文章:

c++ - 使用相同的代码遍历STL序列和关联容器?

c++ - 如何在库加载时将预处理器定义传递给 DLL

windows - 我可以在 Azure 上使用 %PUBLIC% 和其他 "special"文件夹吗?

c++ - strtok 读长

c++ - 虚幻 C++ Controller 输入 : Yaw Rotation

c++ - 函数返回类型样式

visual-studio - 安装 WDK VC++ 后坏了

c++ - Ifstream 在几行后停止读取文件

c++ - 不同类上的互斥锁

c - 从进程 ID 获取进程名称 (win32)