我加载了表单,但只有没有功能的按钮
HMODULE hModule = LoadLibrary(L"Tools.dll");
if (hModule != NULL)
{
AfxSetResourceHandle(hModule);
CDialog dgl(MAKEINTRESOURCE(199), NULL);
dgl.DoModal();
}
那么我如何加载表单的完整功能而我没有 DLL 源代码
我加载了表单,但只有没有功能的按钮
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)
{
}
};
损坏的构造函数名称:??_7TestDialog@@6B@
可能您将能够根据检查结果重新创建对话框类标题。您还应该确保 Tools.dll 和您的应用程序具有相同版本的 MFC。