C++ 如果调用dllimport函数,则MFC在加载时挂起
我有一个MFC应用程序“Analyzer”,它使用带有资源的Dll 有一个函数用于获取dll中包含的对话框实例,名为GetCriteriaDlg 我的dll文件: 我的AnalyzerDoc.cpp,其中我使用了以下功能: dll中还有一个类eportedC++ 如果调用dllimport函数,则MFC在加载时挂起,c++,visual-studio-2008,dll,mfc,loading,C++,Visual Studio 2008,Dll,Mfc,Loading,我有一个MFC应用程序“Analyzer”,它使用带有资源的Dll 有一个函数用于获取dll中包含的对话框实例,名为GetCriteriaDlg 我的dll文件: 我的AnalyzerDoc.cpp,其中我使用了以下功能: dll中还有一个类eported class AFX_EXT_CLASS CCriteriaDlg : public CDialog 并且它们与AnalyzerDoc.cpp中包含的导出类头文件完全相同,名称为DllImports.h AnalyzerDoc.cpp有一个映
class AFX_EXT_CLASS CCriteriaDlg : public CDialog
并且它们与AnalyzerDoc.cpp中包含的导出类头文件完全相同,名称为DllImports.h
AnalyzerDoc.cpp有一个映射到菜单项的函数
Void CAnalyserDoc::OnAnalyseRun()
{
// TODO: Add your command handler code here
CCriteriaDlg *dlg=GetCriteriaDlg();
dlg->DoModal();
}
现在这里是它变得更加脆弱的地方。如果我一切正常,程序将启动,但MFC的常规SD窗口从未出现,我必须从任务管理器结束进程
但是如果我要注释掉OnAnalyseRun()
的内容,那么窗口加载很好(但是很明显,他们在方法调用上没有任何动作,我尝试交换东西,如果我只声明*dlg而没有方法调用,那么窗口加载很好,所以我认为这肯定与GetCriteriaDlg()有关)
为什么会发生这种情况?但是你没有在没有调用
DoModal
的情况下调用GetCriteriaDlg
,是吗?是的,我也试过了,添加DoModal位是最近添加的。你试过调试这个程序吗?我想GetCriteriaDlg会返回一个指向未正确初始化的对话框的指针。好的,现在就把它擦掉即使删除了“OnAnalyseRun”中的所有代码,即使程序正在运行,文档窗口仍然不会出现。
class AFX_EXT_CLASS CCriteriaDlg : public CDialog
Void CAnalyserDoc::OnAnalyseRun()
{
// TODO: Add your command handler code here
CCriteriaDlg *dlg=GetCriteriaDlg();
dlg->DoModal();
}