使用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_STATE return 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; else pDlg->DoModal(); return TRUE; }
在控制台中调用代码:
void main() { string strClassName = "CRasterTransformDlg"; ShowAlgoDialog(strClassName); }
显示的结果