Visual studio 2008 从exe调用MFC dll时断言afxcurrentinstancehandle null

Visual studio 2008 从exe调用MFC dll时断言afxcurrentinstancehandle null,visual-studio-2008,visual-c++,mfc,visual-studio-debugging,vtk,Visual Studio 2008,Visual C++,Mfc,Visual Studio Debugging,Vtk,我有一个MFC应用程序,我正在从exe调用MFC dll(vtkMFC.dll)。在这里,我得到一个调试断言,如下所示,位于afxwin1.inl中 {ASSERT(afxCurrentInstanceHandle!=NULL) 我尝试使用AfxSetResourceHandle(GetModuleHandle(“vtkMFC.dll”))但仍然得到相同的错误。 我正在使用“在静态库中使用MFC”选项。 下面是我的代码: AFX\u管理\u状态(AFXGetStaticModuleEstate(

我有一个MFC应用程序,我正在从exe调用MFC dll(vtkMFC.dll)。在这里,我得到一个调试断言,如下所示,位于afxwin1.inl中

{ASSERT(afxCurrentInstanceHandle!=NULL)

我尝试使用
AfxSetResourceHandle(GetModuleHandle(“vtkMFC.dll”))
但仍然得到相同的错误。 我正在使用
“在静态库中使用MFC”
选项。 下面是我的代码:

AFX\u管理\u状态(AFXGetStaticModuleEstate())
CWaitCursor WC;//有时需要一段时间才能启动
CCCADApp*应用=(CCCADApp*)AfxGetApp();
CFrameWnd*frame=app->pVtkTemplate->CreateNewFrame(此为空);
//第一个init创建视图
app->pVtkTemplate->initialUpdateName(框,this,FALSE);
CvtkMDIView*视图=动态强制转换(框架->GetActiveView());
//
//自动校正-如果解决方案不可用,尝试加载初始字段
如果(run->GetStatus()==CDawesRun::NOTRUN)options=vtkinInitialField | VTKGrid |(options&VTKView2D);
if(view)view->setData(运行、选项、变量);//设置数据
//显示视图和框架
app->pVtkTemplate->initialUpdateName(frame,this,TRUE);
我的主应用程序是用“多线程调试(/MTd)”选项构建的,其中dll是用多线程调试dll(/MDd)构建的。 这与此有关吗? 请帮帮我


谢谢。

为什么静态链接到MFC/CRT?我不确定MFC,但我认为不支持在应用程序的不同模块中静态/动态链接到CRT


您能否尝试使用/MDd进行构建,并动态链接到MFC,然后说它是否有用?

非常感谢Ofek的回复。我的主项目是静态链接的。因此我无法更改它。我的第三方库和dll(vtk)文件是动态链接的。更改它们也不能解决问题,因此我使用了出现错误的文件(VTKMFC窗口)直接在主应用程序中,并删除其_declspec(dllexport)定义。现在它工作正常。再次感谢。
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    CWaitCursor WC; // sometimes takes a while to start
    CCCADApp *app = (CCCADApp *)AfxGetApp();
    CFrameWnd *frame = app->pVtkTemplate->CreateNewFrame( this, NULL );
    // first init creates the view 
    app->pVtkTemplate->InitialUpdateFrame( frame, this, FALSE);
    CvtkMDIView* view= dynamic_cast<CvtkMDIView*>(frame->GetActiveView()); 
    //
    // automatic correction - try to load initial field if solution is not available
    if(run->GetStatus()==CDawesRun::NOTRUN) options=VTKInitialField|VTKGrid|(options & VTKView2D);
    if(view) view->setData(run,options,variable); // set data
    // show the view and frame
    app->pVtkTemplate->InitialUpdateFrame( frame, this, TRUE);