找不到WinAPI CreateDialog Ressource错误0x715

问题描述

通常,经过数小时的研究,我在这里发布了内容,但仍未成功

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

我使用VS2017并尝试了以下方法

使用VS2017资源编辑器,我添加一个对话框(ID:IDD_DIALOG_REPLAY,由资源编辑器在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编译详细选项时)时,我收到以下消息:

1>Writing DIALOG:101,lang:0x40c,size 452.
1>Writing AFX_DIALOG_LAYOUT:101,size 2.

当我在VS2017中打开dll的二进制文件时,我看到有一个对话框ID 101

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

但是当我执行它时,出现错误0x715:ERROR_RESOURCE_TYPE_NOT_FOUND,当然,该对话框没有创建。

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

我绝对不知道为什么会这样。任何帮助都将受到欢迎。

预先感谢

Antoine

解决方法

好吧,感谢Hans,我找到了原因。 我使用的是exe hInstance,因此该程序正在exe中而不是dll中寻找对话框。

将hInstance更改为dll可以解决我的问题。

再次感谢汉斯

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...