0

我有一个 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 的理解是错误的,请告诉我为什么。

4

1 回答 1

0

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

于 2014-04-03T02:25:26.823 回答