Visual studio 2015 Visual Studio 2015 c++/CLI boost::线程

Visual studio 2015 Visual Studio 2015 c++/CLI boost::线程,visual-studio-2015,c++-cli,boost-thread,Visual Studio 2015,C++ Cli,Boost Thread,这个问题在所有Visual Studio版本中都存在,但在VS 2015中,“老把戏”似乎不再有效 这就是我尝试过的: 在VS 2013和2015中创建Windows窗体应用程序(该宏自VS 2013以来丢失,请参阅本文:) 将boost头路径添加到其他Include目录 在cpp中添加#包括“boost/thread.hpp” 添加以下预处理器定义(BOOST\u使用\u窗口\u H;BOOST\u全部\u无\u库;BOOST\u全部\u动态\u链接) 添加链接器依赖项以增强线程和系统库

这个问题在所有Visual Studio版本中都存在,但在VS 2015中,“老把戏”似乎不再有效

这就是我尝试过的:

  • 在VS 2013和2015中创建Windows窗体应用程序(该宏自VS 2013以来丢失,请参阅本文:)

  • 将boost头路径添加到其他Include目录

  • 在cpp中添加#包括“boost/thread.hpp”

  • 添加以下预处理器定义(BOOST\u使用\u窗口\u H;BOOST\u全部\u无\u库;BOOST\u全部\u动态\u链接)

  • 添加链接器依赖项以增强线程和系统库

构建小型测试应用程序编译并链接VS 2013和2015。但当启动VS 2015内置的应用程序时,应用程序崩溃:

TestCLRForms.exe中0x0000000077C3EB18(ntdll.dll)处引发异常:0xC0000005:访问冲突读取位置0xFFFFFFFFFFFF

这是调用堆栈:

ntdll.dll!0000000077c3eb18()    Unknown
KernelBase.dll!000007fefdcd304a()   Unknown
ucrtbased.dll!000007fee02bdeb1()    Unknown
ucrtbased.dll!000007fee02bf9d7()    Unknown
ucrtbased.dll!000007fee02c0438()    Unknown
ucrtbased.dll!000007fee02bfb79()    Unknown
ucrtbased.dll!000007fee02e981d()    Unknown
ucrtbased.dll!000007fee02e9545()    Unknown
ucrtbased.dll!000007fee02e962c()    Unknown
ucrtbased.dll!000007fee02e9d6f()    Unknown
TestCLRForms.exe!_onexit(int(*)() function=0x000000013f627b50) Line 268 C++
TestCLRForms.exe!atexit(void(*)() function=0x000000013f627b50) Line 276 C++
TestCLRForms.exe!__scrt_initialize_thread_safe_statics() Line 109   C++
[Managed to Native Transition]  
TestCLRForms.exe!_initterm_e(int (__cdecl*)()* pfbegin=0x00000000001ad680, int (__cdecl*)()* pfend=0x00000000001ad688) Line 69  C++
TestCLRForms.exe!<CrtImplementationDetails>::LanguageSupport::InitializeNative() Line 355   C++
TestCLRForms.exe!<CrtImplementationDetails>::LanguageSupport::_Initialize() Line 598    C++
TestCLRForms.exe!<CrtImplementationDetails>::LanguageSupport::Initialize() Line 805 C++
TestCLRForms.exe!.cctor() Line 856  C++
[Native to Managed Transition]  
[Managed to Native Transition]  
[Native to Managed Transition]  
mscoreei.dll!000007fef8107fd5() Unknown
mscoree.dll!000007fef81a5b21()  Unknown
kernel32.dll!0000000077b159cd() Unknown
ntdll.dll!0000000077c4a2e1()    Unknown
ntdll.dll!0000000077c3eb18()未知
KernelBase.dll!000007fefdcd304a()未知
ucrtbased.dll!000007fee02bdeb1()未知
ucrtbased.dll!000007fee02bf9d7()未知
ucrtbased.dll!000007fee02c0438()未知
ucrtbased.dll!000007fee02bfb79()未知
ucrtbased.dll!000007fee02e981d()未知
ucrtbased.dll!000007fee02e9545()未知
ucrtbased.dll!000007fee02e962c()未知
ucrtbased.dll!000007fee02e9d6f()未知
TestCLRForms.exe_OnEnter(int(*))函数= 0x000 000 013F627 b50)268线C++
TestCLRForms.exe!ATUTE(空(*)(函数)=0x00 000 013F627 B50)276线C++
TestCLRForms.exe__109 C++
[管理到本机转换]
TestCLRForms.exe_INITTyMe(int(α-cDECL *))(**PFRINGOR= 0x000 000 000),AD680,int(α-CCDLL*)()*PfEnt= 0x000,000,000,AD68)69线C++
TestCLRForms.exe!::LanguageSupport::初始化(355)C++
TestCLRForms.exe!::598:C++
TestCLRForms.exe!::LanguageSupport::初始化()805行C++
TestCLRForms.exe!。CCTRE()856行C++
[本机到托管转换]
[管理到本机转换]
[本机到托管转换]
mscoreei.dll!000007fef8107fd5()未知
mscoree.dll!000007fef81a5b21()未知
内核32.dll!0000000077b159cd()未知
ntdll.dll!0000000077c4a2e1()未知
仅针对x64进行测试

有人有主意吗?谢谢

我找到了一个(至少部分)解决上述问题的解决方法。我把它贴在这里,其他人可能会觉得有用

如果Linker/System中的SubSystem选项设置为Console,而Linker/Advanced中的入口点留空(重要!),则不会发生崩溃,应用程序也会工作。这种解决方法的缺点是控制台窗口与GUI应用程序一起打开

我个人可以接受这一点,因为我的应用程序只是一个测试程序,但对其他人来说,它可能是不可接受的


如果有人能找到更好的解决方案,最初的问题仍然悬而未决。

您可以将属性->链接器->高级->入口点更改为 ?MainCRTStartupstraray@$$FYMHP$01AP$AAVString@System@@@Z(32位,请参阅)或

?MainCRTStartupstraray@$$FYMHP$01EAPE$AAVString@System@@@Z(64位,感谢@Hans Passant,他回答了我的问题)

然后应用程序应该正常启动