我正在调用来自本机.NET dll的函数,如下所示:
string v = myDLL.GetValueFromString("header");
MessageBox.Show(v);
执行程序后,我得到了这个奇怪的错误(在执行此函数的行上):“尝试读取或写入受保护的内存。这通常表示其他内存已损坏。”
此错误消息是什么意思?有没有办法解决这个问题?
答案 0 :(得分:5)
这是一个AccessViolationException。这是一个“硬”异常,处理器实际上在尝试执行机器代码时崩溃。通常是因为它试图通过错误的指针值访问未映射的内存。这对于本机代码来说太常见了,尤其是那种与C字符串一起使用的代码。
我猜你没有写这段代码,你需要得到作者的帮助。给他发一个重现问题的小测试程序。如果您想自己调试一下,那么您需要DLL的源代码并将调试器切换到混合模式,以便您可以调试C#和本机代码。 Project + Properties,Debug选项卡,勾选“启用非托管代码调试”选项。在您调用的本机函数中设置断点。