1

我正在使用一个包含用于与特定硬件交互的非托管代码的 dll,并且我正在尝试从 C# 中使用它,但我不断收到 AccessViolationException。

是什么原因造成的,我该如何解决?

namespace FingerPrint {
    public unsafe partial class Form1 : Form {

        [DllImport("MyDll.dll")]
        public static extern int DoesExist();

        public unsafe Form1() {
            InitializeComponent();

            MessageBox.Show(DoesExist() + "");
        }
    }
}
4

1 回答 1

1

非托管代码的所有故障模式中,大约 95% 会产生访问冲突。您可以通过使 [DllImport] 声明错误来触发这种故障模式。但是发布的 DoesExist() 不能触发一个。

请与供应商或 DLL 的作者联系以获得支持。如果你让它如此容易地失败,他们应该可以轻松地重现故障并使用调试器及其源代码进行诊断。

为了完整起见,AccessViolation 的最典型原因:

  • 非托管代码中的内存管理错误,导致堆损坏
  • 不验证数据,导致空引用或缓冲区溢出
  • 调用支持函数时不检查失败返回错误代码
于 2010-04-01T19:31:55.973 回答