直接调用extern方法时的AccessViolationException

时间:2017-01-09 17:37:29

标签: c# c++ rest exception access-violation

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

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

//导致AccessViolation的版本:

  1. REST调用extern方法为IntPtrIntPtr ptr = FileAccess.getBytes(...);
  2. extern方法返回IntPtr
  3. 发生
  4. AccessViolationException
  5. //使用额外课程的工作版本:

    1. REST调用返回byte[,]的数据组方法。 (例如dataGroupInstance.getDataGroupBytes();
    2. 在方法getDataGroupBytes
    3. 中调用extern方法
    4. extern方法返回IntPtr
    5. 方法getDataGroupBytes整理来自IntPtr的数据并返回byte[,]
    6. 没有错误
    7. 基本上,为什么直接调用extern方法导致AccessViolationException

1 个答案:

答案 0 :(得分:0)

想出来。问题是我的参数的结果 - 当我应该使用std::string时,我的C ++函数使用了const char*。我用std::string替换了const char*的所有实例(它们被用作参数),我不再收到异常。