未找到WinAPI CreateDialog Ressource错误0x715
像往常一样,经过几个小时的研究和尝试,我在这里发帖,但没有成功 我用C编写了这个旧的dll。目前,它没有接口,但我需要向它添加一个对话框 我与VS2017合作并尝试了以下方法: 使用VS2017 ressource editor,我添加了一个对话框(id:IDD_dialog_REPLAY,由resource editor在resource.h文件中自动定义为101),并添加了以下代码来创建我的对话框:未找到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
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,感谢您分享根本原因和解决方案,您也可以自由选择。