c# - Windows 7 访问冲突
问题描述
我正在编写一个包含一组 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 上。
解决方案
问题出在增强线程上。我的静态库使用内部使用 boost 线程的 boost 库。/DBOOST_THREAD_DYN_LINK
为了解决这个问题,我在我的静态库和 C++/cli 包装器 dll 中添加了一个命令行定义。这意味着我必须将用于 boost thread、chrono 和 system 的 dll 文件连同我自己的 dll 一起包含在内。为什么这只发生在 Windows 7 而不是 10 我不确定,但我猜这与 Windows 7 上的内核以及它如何处理 boost 线程的工作方式有关。
推荐阅读
- r - If 语句将条件视为 FALSE,尽管条件打印为 TRUE
- ios - 核心数据无法合并更改崩溃 - 仅使用更大的 SQLite
- html - 向右浮动的 Div 将我居中的桌子推向左侧。我该如何解决?
- python - 在 TimSort 之前,python 中 sort() 背后的算法是什么?
- java - 如何使用地点选择器解决这个问题?
- python - bert-serving-start 给出错误 TypeError: cannot unpack non-iterable NoneType object - 尝试了模型的多个路径
- javascript - Javascript程序以相反的方式工作?
- csv - 将 CSV 文件解析为 TCL
- sql - 如何对以 + 结尾的列名使用 select 语句
- python - re.sub 和 re.subn