我正在编写一个包含一组GUI并使用C ++ CLR包装器DLL的C#应用程序。结构是这样的:
C#APP - > C ++ / CLR DLL - > C ++ Native Code静态库
我可以在我的开发计算机(Windows Server 2012)和Windows 10计算机上运行该应用程序。但是在Windows 7上,当应用程序尝试加载DLL时,它会因访问冲突异常而崩溃。我无法弄清楚我的DLL中导致崩溃的原因以及为什么它只在Windows 7上。所有东西都是用64位编译的。另外我认为它可能与我在C ++静态库中使用的boost库有关,但我不确定为什么它只会在Windows 7中引发异常。
所以我一直在做更多调试,问题发生在LoadLibrary(“myDll.dll”)而不是任何初始化。它仍然只发生在Windows 7而不是Windows 10上。
答案 0 :(得分:0)
问题在于提升线程。我的静态lib使用内部使用boost线程的boost库。为了解决这个问题,我在我的静态库和C ++ / cli包装器dll中添加了命令行define /DBOOST_THREAD_DYN_LINK
。这意味着我必须包含boost线程,计时器和系统的dll文件以及我自己的dll。为什么这只发生在Windows 7而不是10我不确定,但我猜它与Windows 7上的内核有关,以及它如何处理boost线程的工作方式。