0

使用 c# 我正在尝试加载用 C++/Cli 编写的 dll,我使用了以下命令:

Assembly assembly = Assembly.Load(assemblyName);

以前它没有任何问题,我不确定发生了什么变化,但今天每当我尝试加载 dll 时,我开始收到以下错误

System.AccessViolationException: {“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”}

dll 和读取它的代码都在同一个解决方案中,并且 dll 本身经常更改(因此我使用 dll)。

有谁知道什么可能导致这个异常?

附录:

我已将其缩小到我最近添加的一个使用 boost 的库。我使用BOOST_LIB_DIAGNOSTIC并发现它使用以下内容:

链接到 lib 文件:libboost_date_time-vc100-mt-gd-1_54.lib

链接到 lib 文件:libboost_thread-vc100-mt-gd-1_54.lib

链接到 lib 文件:libboost_system-vc100-mt-gd-1_54.lib

链接到 lib 文件:libboost_chrono-vc100-mt-gd-1_54.lib

找到了一个似乎处理类似问题的提升帖子,但实际上并没有解决我的问题。它说要使用BOOST_ALL_DYN_LINK预处理器定义,但所做的只是导致进一步的链接错误:

致命错误 LNK1104:无法打开文件 'boost_date_time-vc100-mt-gd-1_54.lib'

4

1 回答 1

0

这个问题已经以最明显的方式解决了。

从顶部下载并编译提升,得到所有丢失的文件(由于某种原因,我的文件夹中丢失了)。

总而言之:添加BOOST_ALL_DYN_LINK预处理器定义,重新编译 boost 以获取所有丢失的文件并确保 dll 位于适当的文件夹中。

于 2014-04-01T15:34:12.870 回答