0

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

HMODULE hModule = LoadLibrary(L"Tools.dll");

if (hModule != NULL)
{
    AfxSetResourceHandle(hModule);
    CDialog dgl(MAKEINTRESOURCE(199), NULL);
    dgl.DoModal(); 
}

那么我如何加载表单的完整功能而我没有 DLL 源代码

4

2 回答 2

2

要显示对话框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(); 
于 2014-11-11T10:41:38.567 回答
0

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

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

    }
};

损坏的构造函数名称:??_7TestDialog@@6B@

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

于 2011-06-16T16:51:58.277 回答