使用c#,我试图加载用C++/Cli编写的dll,我使用了以下命令:
Assembly assembly = Assembly.Load(assemblyName);
以前,它不存在任何问题,我也不确定是什么改变了,但是今天,每当我试图加载dll时,我就开始得到以下错误
System.AccessViolationException:{“试图读取或写入受保护的内存。这通常表示其他内存已损坏”}。
dll和读取它的代码都在同一解决方案中,dll本身经常被更改(因此我使用dll)。
有没有人知道是什么导致了这一异常?
增编:
我已经将其缩小到了我最近添加的使用boost的库中。我使用了BOOST_LIB_DIAGNOSTIC
,发现它使用了以下内容:
链接到lib文件:libboost_date_time- to 100-mt 1_54.lib 链接到lib文件:libboost_线程- to 100-mt 1_54.lib 链接到lib文件:libboost_system- to 100-mt 1_54.lib 链接到lib文件:libboost_ Linking 100-mt 1_54.lib
找到了一个助推帖子,它似乎处理类似的问题,但没有真正解决我的问题。它说要使用BOOST_ALL_DYN_LINK
预处理器定义,但只会导致进一步的链接错误:
致命错误LNK1104:无法打开文件‘boost_date_time 100-mt-gd-1_54.lib’
发布于 2014-04-01 15:34:12
这个问题已经以最明显的方式解决了。
从顶部下载并编译了boost,得到了所有丢失的文件(由于某种原因,这些文件从我的文件夹中丢失)。
总之:添加了BOOST_ALL_DYN_LINK
预处理器定义,重新编译boost以获取所有丢失的文件,并确保dll位于适当的文件夹中。
https://stackoverflow.com/questions/22764361
复制相似问题