未找到WinAPI CreateDialog Ressource错误0x715

未找到WinAPI CreateDialog Ressource错误0x715,winapi,visual-c++,visual-studio-2017,embedded-resource,Winapi,Visual C++,Visual Studio 2017,Embedded Resource,像往常一样,经过几个小时的研究和尝试,我在这里发帖,但没有成功 我用C编写了这个旧的dll。目前,它没有接口,但我需要向它添加一个对话框 我与VS2017合作并尝试了以下方法: 使用VS2017 ressource editor,我添加了一个对话框(id:IDD_dialog_REPLAY,由resource editor在resource.h文件中自动定义为101),并添加了以下代码来创建我的对话框: INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSi

像往常一样,经过几个小时的研究和尝试,我在这里发帖,但没有成功

我用C编写了这个旧的dll。目前,它没有接口,但我需要向它添加一个对话框

我与VS2017合作并尝试了以下方法:

使用VS2017 ressource editor,我添加了一个对话框(id:IDD_dialog_REPLAY,由resource editor在resource.h文件中自动定义为101),并添加了以下代码来创建我的对话框:

INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_LINK_CLASS | ICC_STANDARD_CLASSES | ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

HWND  hDialog = 0;
hDialog = CreateDialog(pSGL->hInstance,MAKEINTRESOURCE(IDD_DIALOG_REPLAY),NULL,WndProc);

if (!hDialog)
{
    char buf [100];
    wsprintf (buf, "Error x%x", GetLastError ());
    MessageBox (0, buf, "CreateDialog", MB_ICONEXCLAMATION | MB_OK);
    return 1;
}

ShowWindow(hDialog, SW_SHOW);
注意1:消息循环已经存在于同一线程中执行的另一个dll中

注2:我第一次使用了回调函数WndProc,这是一个相当标准的函数,基本上执行DefWindowProc函数

当我编译dll(设置了ressource compilation verbose选项)时,会收到以下消息:

1>Writing DIALOG:101,   lang:0x40c, size 452.
1>Writing AFX_DIALOG_LAYOUT:101,    lang:0x40c, size 2.
当我在VS2017中打开dll的二进制文件时,我可以看到有一个对话框id 101

=>该对话框实际上存在于我的二进制文件中

但是当我执行它时,我得到了一个错误0x715:error\u RESOURCE\u TYPE\u NOT\u FOUND,当然,对话框没有创建

注意:无论对话框是否包含控件或是否为空,都会发生这种情况

我完全不知道为什么会发生这种事。任何帮助都是非常受欢迎的

提前感谢,

安托万

好的,多亏了,我找到了原因。 我使用的是exe hInstance,因此,程序在exe中查找对话框,而不是在dll中

将hInstance更改为dll one解决了我的问题


再次感谢Hans

您没有正确初始化
INITCOMMONCONTROLSEX
结构,因此如果您的对话框实际使用了任何常用控件,其创建可能会因此失败。我更改了此选项(希望正确),但这并没有解决我的问题。再一次,即使我的对话框为空,我也会遇到问题。
pSGL->hInstance
的值错误。pSGL->hInstance包含主exe hInstance。但是为了以防万一,我用GetModuleHandle(NULL)=>替换了它,仍然是相同的错误0x715。。。。。。。在任何情况下,将hInstance设置为NULL调用CreateDialog都不会阻止要创建的窗口。将其设置为NULL也会产生相同的结果,它会在.exe文件而不是.dll文件中查找资源。Hi@Jopich,感谢您分享根本原因和解决方案,您也可以自由选择。