我有一个在Visual Studio 2008下运行良好的MFC常规DLL项目,但是当项目升级到VS 2010时,出现了一个新问题,即appcore.cpp中的以下断言会失败:
CWinApp::CWinApp(LPCTSTR lpszAppName)
{
[...]
ASSERT(AfxGetThread() == NULL);
如果创建了多个CDialog派生类的实例,则断言将失败。根据我在网上所做的研究,似乎MFC的行为会发生变化,导致这种失败。
从我读过的,这个问题的解决方法是在新的CWinThread中创建每个CDialog派生类,但是我遇到了同样的问题,所以,我确信我的实现中缺少一些东西,但是,我不知道遗失了什么。
我曾经尝试在CWinThread类中创建CDialog的示例来自http://www.experts-exchange.com/Programming/System/Windows__Programming/A_1886-Create-a-Dialog-in-its-Own-Thread.html,但是我的代码仍然在上面列出的ASSERT中失败。
所以我的问题是,有没有人有一个很好的例子,关于如何在MFC常规DLL中使用CWinThread正确创建多个CDialog派生类?
哦,如果我对创建多个线程以解决上面列出的ASSERT的理解是错误的,请告诉我原因。
答案 0 :(得分:0)
不幸的是,问题的答案实际上涉及使用的MFC版本。 DLL使用mfc10,而主机应用程序与mfc9链接;一旦DLL被更改为使用mfc9,上面列出的问题就消失了。