Visual studio 2008 从exe调用MFC dll时断言afxcurrentinstancehandle null
我有一个MFC应用程序,我正在从exe调用MFC dll(vtkMFC.dll)。在这里,我得到一个调试断言,如下所示,位于afxwin1.inl中 {ASSERT(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(
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);