我加载了表单,但只加了没有函数的按钮
HMODULE hModule = LoadLibrary(L"Tools.dll");
if (hModule != NULL)
{
AfxSetResourceHandle(hModule);
CDialog dgl(MAKEINTRESOURCE(199), NULL);
dgl.DoModal();
}
所以如何加载表单的完整功能 我没有DLL源代码
答案 0 :(得分:2)
要显示来自MFC dll
的对话框,就像场景一样 - 您已经在DLL中导出了函数,并从该函数中调用DoModel()
。此模板实际存储在DLL模块中。您需要切换模块状态为要使用的当前句柄。您可以使用以下方法执行此操作:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AFX_MODULE_STATE AfxGetStaticModuleState()
- > The AFX_MODULE_STATE
结构包含模块的全局数据,即推送或弹出的模块状态部分。
在DLL代码中将是这样的:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg objMyDlg;
iRet = objMyDlg.DoModal();
答案 1 :(得分:0)
只有在确定对话框类实现是基于MFC并且从Tools.dll导出类时,才可以执行此操作。您可以尝试使用Dependency Walker实用程序检查.dll 请注意编译器修改构造函数名称。这就是我对以下声明的看法。
class __declspec(dllexport) TestDialog : public CDialog
{
public:
TestDialog()
:CDialog(10)
{
}
};
Mangled构造函数名称:?? _ 7TestDialog @@ 6B @
您可能会根据检查结果重新创建对话框类标题。您还应该确保您为Tools.dll和您的应用程序使用相同版本的MFC。