最近在一个C#项目中要用到MFC的扩展dll,结果怎么引用都不行,首先是运行出现下列问题:
Debug Assert Failed
在afxwin2.inl的22行
后来查了发现是资源的问题,于是在接口函数中加了一句:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
结果编译出错:
DllMain重复定义
后来才发现是MFC的扩展dll只能是MFC的程序调用,一直找、一直试,到最后也没有调通。
最后实在没有办法,只好重新做dll,包原来的扩展dll。
又出现问题,程序是能通过了,但是对话框没有出来。
最后找到一篇回帖,才总算解决了。
提到“AFX_MANAGE_STATE(AfxGetStaticModuleState( ))”的,是80%正解。在ATL程序里,准备“Create”或者“DoModal”的前面先加上这句!
而剩下的20%是这样,MFC扩展DLL的向导生成代码的注释里明确说了,当MFC扩展DLL的调用者不是MFC EXE,而是MFC DLL时(你的支持MFC的ATL组件相当于MFC DLL),必须将“new CDynLinkLibrary(newlistviewDLL);”这句从DllMain里拿掉。然后单独做一个引出函数如:
void AFX_EXT_API InitMyListViewModule()
{
new CDynLinkLibrary(newlistviewDLL);
}
然后在你的MFC DLL的CWinApp::InitInstance里手动调用这个函数。至此,MFC扩展DLL的链式资源才算是彻底初始化完毕。