情景:主工程调用封装的DLL,其中DLL里面有对话框,也就是说主工程调用DLL里的导出类的成员函数,成员函数再启动对话框。(直接导出(AFX_EXT_CLASS)对话框类的话会报错,具体还没研究)
DoModal()总是弹不出对话框,DoModal()返回值为-1,开始以为是资源ID等一系列的问题。MFC对话框DoMoal返回-1
检查了好几遍,又重新建对话框类,也还不行。但是主工程的对话框可以正常弹出。
后来考虑DLL导出有问题,重新建工程,终于发现工程建错了,晕!!!
MFC有三种DLL:MFC的3种DLL
之前选的第一种:MFC regular dll,后来选第三种:MFC extension dll可以正常弹出对话框了。
问题是解决;但仍然不是很清楚其内部的关联,下面可以参考研究:
Regular DLL(MFC规则DLL)、MFC...Extension DLL(MFC扩展DLL 区别
AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用
MFC DLL 不能正确调用的问题 + AFX_MANAGE_STATE(AfxGetStaticModuleState());
[经验总结] MFC DLL——Regular DLL and Extension DLL(
加了AFX_MANAGE_STATE(AfxGetStaticModuleState());会有断言(有可能加的方式不对)
查了一下说是没有初始化,
加了:
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
//??_Module.LogEvent(_T("MFC初始化错误!"), EVENTLOG_ERROR_TYPE );
return;
}
还是弹不出对话框,没时间研究了,有空再看。