C++ MFC从DLL导入对话框

C++ MFC从DLL导入对话框,c++,visual-c++,dll,mfc,C++,Visual C++,Dll,Mfc,我有两个项目:一个MFC.exe和一个MFC.dll。我在DLL中定义了一个MFC对话框。它有一个与之关联的资源,并且它还有一个从CDialog派生的类CToolboxDiag 该对话框有一个简单的按钮,单击时显示消息对话框 void CToolboxDiag::OnBnClickedButton() { MessageBox(_T("Test"), _T("T")); } 我可以将资源从DLL导出到我的代码中,并使用以下代码创建具有正确外观的标准CDialog: CDialog *di

我有两个项目:一个MFC.exe和一个MFC.dll。我在DLL中定义了一个MFC对话框。它有一个与之关联的资源,并且它还有一个从
CDialog
派生的类
CToolboxDiag

该对话框有一个简单的按钮,单击时显示消息对话框

void CToolboxDiag::OnBnClickedButton()
{
   MessageBox(_T("Test"), _T("T"));
}
我可以将资源从DLL导出到我的代码中,并使用以下代码创建具有正确外观的标准
CDialog

CDialog *diag = new CDialog;

HINSTANCE hClientResources = AfxGetResourceHandle();

//Tell the client to use the .DLL's resources
AfxSetResourceHandle(dll);

// resource_id is the resource_id in the DLL
diag->Create(resource_id, NULL);

//Restore the client application resource handle
AfxSetResourceHandle(hClientResources);
但这只会导致显示对话框,但单击控件(即按钮)时不会执行任何操作,因为它没有链接到.exe中的
CToolboxDiag
定义


我想导出对话框(带有按钮代码),而不必将类定义导出到.exe。换句话说,我想导出一个功能齐全的对话框,包括它的按钮操作,而不必在my.exe上定义
CToolboxDialog
,这样就可以完全模块化。我该怎么做呢?

这样不行。资源模板与DLL中的代码没有直接连接。您的代码刚刚创建了一个“空”CDialog类,该类没有任何处理程序,除了默认的处理程序(OnOk、OnClose…)

因此,您需要创建对象CToolboxDiag,这必须在对话框代码所在的位置发生。这是在DLL中

最简单的方法是导出一个函数,该函数只在DLL中创建对话框,并向应用程序返回CDialog*


请注意,这只允许在使用MFC的DLL共享版本时使用,并且不会出现问题

将AFX_置于管理_状态(AFXGetStaticModuleEstate());调用dll时functions@SantoshDhanawade是的,谢谢。但是我想知道的是如何从DLLI导入fhole对话框功能。我试过了,但它不起作用。当我返回指向CDialog的指针时,它在.exe上下文中无效,并导致许多断言错误。也许你有一些例子?出于某种原因,这是崩溃,在一些
InternalDllMain
函数中,当我用LoadLibrary导入DLL时,它会崩溃。使应用程序崩溃的函数是
AfxWinInit
,在导入Dll时调用该函数。你有什么提示吗?