直接调用外部方法时的访问违规异常

AccessViolationException when calling an extern method directly

本文关键字:访问 异常 调用 外部 方法      更新时间:2023-10-16

我有一个由C++项目形成的 nuget - 在该 nuget 中,我有一个 extern 方法GetBytes静态类 FileAccess 内部.cs我在另一个项目的 (C#) REST 服务调用中调用它来检索一些数据。每当我从 C# REST 服务调用此GetBytesextern方法时,出于某种原因,我都会得到AccessViolationException。该方法接受两个字符串和几个 int 值并返回一个IntPtr

我很困惑,因为我有一个不会导致违规的类似电话。主要区别在于此版本不直接调用 extern 方法。相反,它调用 C# DataGroup 类(它是 nuget 的一部分),该类包含一个调用 extern 方法的函数。DataGroup 类方法返回一个byte[,],但只有在它调用 extern 方法并封送数据之后。

导致访问冲突的版本:

  1. REST 调用外部方法作为IntPtr(IntPtr ptr = FileAccess.getBytes(...);
  2. 外部方法返回一个IntPtr
  3. 发生AccessViolationException

带有额外类的工作版本:

  1. 对返回byte[,]的数据组方法的 REST 调用。(例如dataGroupInstance.getDataGroupBytes();
  2. 外部方法称为内部方法getDataGroupBytes
  3. extern 方法返回一个IntPtr
  4. 方法getDataGroupBytes封送来自IntPtr的数据并返回byte[,]
  5. 没有错误

基本上,为什么调用 extern 方法直接会导致AccessViolationException

想通了。问题是由我的参数引起的 - 我的C++函数在我应该使用const char*的时候使用了std::string。我用const char*替换了所有std::string实例(它们用作参数),我不再收到异常。