如何在 CWinThread 派生类中正确创建 CDialog 框
How to properly create a CDialog box in a CWinThread derived class
我有一个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,上面列出的问题就消失了。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 在 CDialog 派生类上创建使用 VS2015 CLR 返回 0,在 VC++ 6 中工作正常
- 如何在 CWinThread 派生类中正确创建 CDialog 框
- 当 CDialog.DoModal() 函数无法创建对话框时
- 未创建CDialog对象