显示MFC DLL中的对话框

Show dialog from MFC DLL

本文关键字:对话框 DLL MFC 显示      更新时间:2023-10-16

我加载了表单,但只加载了没有功能的按钮

HMODULE hModule = LoadLibrary(L"Tools.dll");
if (hModule != NULL)
{
    AfxSetResourceHandle(hModule);
    CDialog dgl(MAKEINTRESOURCE(199), NULL);
    dgl.DoModal(); 
}

那么我如何加载表单的全部函数并且我没有DLL源代码

要从MFC dll显示对话框,就像场景一样-您已经在DLL中导出了函数,并从该函数中调用DoModel()。该模板实际上存储在DLL模块中。您需要切换模块状态才能使用当前句柄。您可以使用:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
AFX_MODULE_STATE AfxGetStaticModuleState()

->The AFX_MODULE_STATE结构包含模块的全局数据,即模块状态中被推送或弹出的部分。

IN DLL代码如下:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg objMyDlg;
iRet = objMyDlg.DoModal(); 

只有当您确定对话框类实现是基于MFC的,并且该类是从Tools.dll导出的时,这才有可能。您可以尝试使用Dependency Walker实用程序检查.dll
请注意编译器损坏了构造函数名称。这是我在下面的声明中得到的。

class __declspec(dllexport) TestDialog : public CDialog
{
public:
    TestDialog()
        :CDialog(10)
    {
    }
};

混乱的构造函数名称:_7测试对话框@@6B@

也许您将能够根据检查结果重新创建对话框类标题。您还应该确保Tools.dll和应用程序的MFC版本相同。