在控制台环境下调用MFC DLL崩溃的问题小结

    使用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);
}

显示的结果

image

 

posted on 2011-02-15 10:22  王大王  阅读(309)  评论(0编辑  收藏  举报

导航