我有一个MFC应用程序,“Analyzer”,它使用带有资源的Dll。
有一个函数可以获取名为GetCriteriaDlg的dll中包含的Dialog实例。
我的dll文件:
extern "C" {__declspec(dllexport) CCriteriaDlg* GetCriteriaDlg(void );}
in the dll cpp file I have
extern "C"
{
__declspec(dllexport) CCriteriaDlg* GetCriteriaDlg(void )
{
return &dlg;
}
}
My AnalyserDoc.cpp我在哪里使用函数:
extern "C" {__declspec(dllimport) CCriteriaDlg* GetCriteriaDlg(void );}
还有一个在dll中输入的类
class AFX_EXT_CLASS CCriteriaDlg : public CDialog
它们与名为 DllImports.h
的 AnalyserDoc.cpp 中包含的导出类头文件完全相同AnalyserDoc.cpp 有一个映射到菜单项的函数
Void CAnalyserDoc::OnAnalyseRun()
{
// TODO: Add your command handler code here
CCriteriaDlg *dlg=GetCriteriaDlg();
dlg->DoModal();
}
现在这里变得奇怪了。如果我拥有一切,那么程序启动但MFC的常用SD窗口永远不会出现,我必须从任务管理器结束进程。
但是,如果我要评论OnAnalyseRun()
的内容,那么窗口加载正常(但显然他们对方法调用没有动作,我尝试交换周围的事情,如果我只声明* dlg该方法调用窗口加载正常,所以我认为它肯定与GetCriteriaDlg()
。
为什么会这样?