请问各位大虾:
我写了一个带视图/文档的MFC扩展DLL,
当主程序调用DLL中的函数dispReport()时,
执行到CWinApp* pApp = AfxGetApp();后
发现pApp为NULL
为什么?
怎么解决?
BOOL CReportTable::dispReport(){
AfxMessageBox("^_^");
BOOL bSuccess = FALSE; AfxMessageBox("1");
CWinApp* pApp = AfxGetApp();
AfxMessageBox("2");
ASSERT(pApp);
if(pApp)
{
AfxMessageBox("3");
CMultiDocTemplate* pDocTemplate; AfxMessageBox("4");
pDocTemplate = new CMultiDocTemplate(
IDR_REPORTTABLEDOCTYPE,
RUNTIME_CLASS(CReportDoc),
RUNTIME_CLASS(CMDIChildWnd),
RUNTIME_CLASS(CReportView));
AfxMessageBox("5");
ASSERT(pDocTemplate);
AfxMessageBox("6");
if(pDocTemplate){
AfxMessageBox("7");
pApp->AddDocTemplate(pDocTemplate);
bSuccess = TRUE;
}
AfxMessageBox("8");
}
AfxMessageBox("9");
return bSuccess;
}

解决方案 »

  1.   

    在函数开头加上
    AFX_MANAGE_STATE(AfxGetAppModuleState());
    试试
      

  2.   

    扩展mfc dll要加上AFX_MANAGE_STAT
      

  3.   

    用这个
    AFX_MANAGE_STATE(AfxGetAppModuleState());
    表明是动态库中的调用!
      

  4.   

    通过程序的主句柄来得到app试试
      

  5.   

    如何从动态链接库(DLL)中导出类
    http://hao.kjz.cn/xml/040917142352.xml
      

  6.   

    MFC扩展dll的写法是在类名前加AFX_EXT_CLASS ,比如class AFX_EXT_CLASS A{...};MFC常规dll的写法是在类名前加_declspec(dllexport),比如class _declspec(dllexport) B(...);,同时要在每个被调用的函数里面,第一行添加一句:AFX_MANAGE_STATE(AfxGetAppModuleState());