从 MFC DLL 显示对话框
Posted
技术标签:
【中文标题】从 MFC DLL 显示对话框【英文标题】:Show dialog from MFC DLL 【发布时间】:2011-06-14 23:24:20 【问题描述】:我加载了表单但只有按钮没有功能
HMODULE hModule = LoadLibrary(L"Tools.dll");
if (hModule != NULL)
AfxSetResourceHandle(hModule);
CDialog dgl(MAKEINTRESOURCE(199), NULL);
dgl.DoModal();
那么我如何加载表单的完整功能 而且我没有DLL源代码
【问题讨论】:
【参考方案1】:要显示来自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();
【讨论】:
【参考方案2】:只有当您确定对话框类实现是基于 MFC 并且该类是从 Tools.dll 导出时,这才有可能。您可以尝试使用 Dependency Walker 实用程序检查您的 .dll。 请注意编译器会破坏构造函数名称。这就是我得到的以下声明。
class __declspec(dllexport) TestDialog : public CDialog
public:
TestDialog()
:CDialog(10)
;
损坏的构造函数名称:??_7TestDialog@@6B@
您可能能够根据检查结果重新创建对话框类标题。您还应该确保 Tools.dll 和您的应用程序的 MFC 版本相同。
【讨论】:
以上是关于从 MFC DLL 显示对话框的主要内容,如果未能解决你的问题,请参考以下文章