我有一个由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的版本:
IntPtr
(IntPtr ptr = FileAccess.getBytes(...);
IntPtr
AccessViolationException
//使用额外课程的工作版本:
byte[,]
的数据组方法。 (例如dataGroupInstance.getDataGroupBytes();
getDataGroupBytes
IntPtr
getDataGroupBytes
整理来自IntPtr
的数据并返回byte[,]
基本上,为什么直接调用extern方法导致AccessViolationException
?
答案 0 :(得分:0)
想出来。问题是我的参数的结果 - 当我应该使用std::string
时,我的C ++函数使用了const char*
。我用std::string
替换了const char*
的所有实例(它们被用作参数),我不再收到异常。