使用MFC编写的DLL在MFC的程序中调用是没有任何问题的,但是如果在控制台环境下调用会出现崩溃的情况。解决方法如下,在MFC编写的DLL中添加下面一段代码,即可解决该问题:
static AFX_MODULE_STATE * g_MoudleState = NULL; //定义一个AFX_MODULE_STATE指针class CDLLApp : public CWinApp { public:CDLLApp(){}virtual BOOL InitInstance(){CWinApp::InitInstance();g_MoudleState = AfxGetModuleState(); //获取MODULE_STATEreturn TRUE;}DECLARE_MESSAGE_MAP() };BEGIN_MESSAGE_MAP(CDLLApp, CWinApp) END_MESSAGE_MAP()
CDLLApp theApp;//导出函数 BOOL ShowAlgoDialog(string strDlgName) {AfxSetModuleState(g_MoudleState); //在导出函数开始添加此行代码CDialog * pDlg = (ClassMap::forName(strDlgName));if(pDlg == NULL)return FALSE;elsepDlg->DoModal();return TRUE; }
void main() {string strClassName = "CRasterTransformDlg";ShowAlgoDialog(strClassName); }
显示的结果