BHO 中的 CreateDialog 总是失败并出现错误 1813(未找到资源)

CreateDialog in BHO always fails with error 1813 (resource not found)

我正在研究很久以前用 C++ 编写的 BHO,没有使用任何 VS 向导。因此,该项目偏离了 COM 约定和 COM 产品的样板。我很久以前就使用 COM,但从未真正做过任何 Windows GUI/dialog 东西...

我正在尝试添加一个对话框以允许用户设置一些新设置的值:

// serverDialog will be NULL
HWND serverDialog = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_PROPPAGE_SETTINGS), NULL, DialogProc);

id (!serverDialog) 
{
    int error = GetLastError(); //1813
    ...
}

....

1813表示找不到资源。那里使用的 IDD 在 resource.h 中,我在需要的地方手动添加了它。

DialogProc 定义为:

INT_PTR CALLBACK DialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    return FALSE;
}

我知道如果我想让对话框实际处理消息,我将不得不稍后更改,但我还没有做到这一点。 1813 错误表明甚至在创建对话框之前就失败了,返回 NULL 对话框句柄也是如此。

为了添加对话框,我使用了“添加资源”向导并添加了一个小 属性 页面。

我已尝试遵循建议here,但无济于事。

谢谢!

您将 GetModuleHandle(NULL) 作为包含资源的模块的实例传递。但是GetModuleHandle(NULL)定义了可执行文件模块。您需要传递包含您的代码的模块实例。这个问题涵盖了该主题:How do I get the HMODULE for the currently executing code?

您可能应该将 window 句柄传递给 hWndParent 参数,以便拥有该对话框。