如何在 CWinThread 派生类中正确创建 CDialog 框



我有一个MFC常规DLL项目,在Visual Studio 2008下运行良好,但是当该项目升级到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 的理解是错误的,请告诉我原因。

不幸的是,问题的答案实际上涉及正在使用的MFC版本。DLL 使用 mfc10,而主机应用程序针对 mfc9 链接;一旦DLL更改为使用MFC9,上面列出的问题就消失了。

最新更新