【发布时间】:2017-02-26 03:27:25
【问题描述】:
所有 Visual Studio 版本都存在此问题,但在 VS 2015 中,“旧技巧”似乎不再适用。
这是我尝试过的:
在 VS 2013 和 2015 中创建一个 Windows 窗体应用程序(自 VS 2013 以来该宏已丢失,因此请参阅此帖子:Can't find Windows Forms Application for C++)
将 boost headers 路径添加到其他包含目录
在cpp中添加#include "boost/thread.hpp"
添加以下预处理器定义 (BOOST_USE_WINDOWS_H;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK)
添加链接器依赖项以提升线程和系统库
构建小型测试应用程序会编译并与 VS 2013 和 2015 链接。但是当启动在 VS 2015 中构建的应用程序时,应用程序崩溃:
TestCLRForms.exe 中的 0x0000000077C3EB18 (ntdll.dll) 引发异常:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。
这是调用堆栈:
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
仅针对 x64 测试。
有人有想法吗?谢谢
【问题讨论】:
标签: visual-studio-2015 c++-cli boost-thread