【问题标题】:C# weird exception errorC#奇怪的异常错误
【发布时间】:2012-01-02 07:33:35
【问题描述】:

我正在从本机 .NET dll 调用一个函数,如下所示:

string v = myDLL.GetValueFromString("header");
MessageBox.Show(v);

在执行程序时,我收到了这个奇怪的错误(在执行此函数的行上):“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”

这个错误信息是什么意思?有没有办法解决这个问题?

【问题讨论】:

  • 这通常表明您的互操作调用错误。有一种方法可以解决它。当然,为此,您必须显示您尝试调用的非托管函数的签名以及您为其定义的托管签名。
  • 方式 太多的可能性。我们需要查看更多代码来帮助您进行调试。
  • 什么是myDLL?它的类是什么以及如何创建这个实例?

标签: c# exception memory dll protected


【解决方案1】:

这是一个 AccessViolationException。这是一个“硬”异常,处理器实际上在尝试执行机器代码时崩溃。通常是因为它试图通过错误的指针值访问未映射的内存。这在本机代码中太常见了,尤其是使用 C 字符串的那种代码。

我猜这不是你写的代码,你需要作者的帮助。向他发送一个重现问题的小型测试程序。如果您想自己调试一下,那么您需要 DLL 的源代码并将调试器切换到混合模式,以便您可以调试 C# 和本机代码。项目+属性,调试选项卡,勾选“启用非托管代码调试”选项。在您正在调用的本机函数中设置断点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多