添加#include <boost/thread/mutex.hpp>会破坏我的ActiveX控件吗?

Gra*_*amS 6 c++ mfc boost activex visual-c++

在ActiveX控件中使用时,boost :: mutex标头是否存在已知问题?
(提升版本v1.39)

如果我在Visual Studio 2008中创建名为"DefaultOCXControl"MFC ActiveX控件项目,那么我可以构建它,控件将自身注册为构建的一部分,并且可以像您期望的那样插入到ActiveX测试容器中.都好.

如果我然后添加此行:

#include <boost/thread/mutex.hpp>
Run Code Online (Sandbox Code Playgroud)

在我的DefaultOCXControlCtrl.h文件顶部并重建:构建结束时的注册步骤失败:

调试断言失败!
程序:C:\ Windows\system32\regsvr32.exe
文件:f:\ dd\vctools\vc7libs\ship\atlmfc\src\mfc\dllinit.cpp
行:587

令人不快的断言看起来像这样:

void AFXAPI AfxCoreInitModule()
{
    ASSERT(AfxGetModuleState() != AfxGetAppModuleState());
    ...
Run Code Online (Sandbox Code Playgroud)

尝试将控件插入ActiveX测试容器现在会产生相同的消息.如果我删除该行并重建然后一切都很好 - 所以它肯定似乎是该头文件中导致问题的东西.

Pao*_*oli 7

您是否尝试过boost::thread动态链接(定义BOOST_THREAD_DYN_LINK)?

使用boost::thread混合C++/.NET项目时出现这种问题,boost::thread动态链接就是解决方案(这里有一个可能的解释:http://article.gmane.org/gmane.comp.lib.boost.user/22617/match = clr)


Mat*_*ndl 5

从Boost 1.52起,您可以尝试将此行添加到您的代码中,尤其是如果您更喜欢静态链接:

#include <boost/thread/win32/mfc_thread_init.hpp>
Run Code Online (Sandbox Code Playgroud)

资料来源:Boost Ticket 8550