直接调用外部方法时的访问违规异常
AccessViolationException when calling an extern method directly
我有一个由C++项目形成的 nuget - 在该 nuget 中,我有一个 extern 方法GetBytes
静态类 FileAccess 内部.cs我在另一个项目的 (C#) REST 服务调用中调用它来检索一些数据。每当我从 C# REST 服务调用此GetBytes
extern
方法时,出于某种原因,我都会得到AccessViolationException
。该方法接受两个字符串和几个 int 值并返回一个IntPtr
。
我很困惑,因为我有一个不会导致违规的类似电话。主要区别在于此版本不直接调用 extern 方法。相反,它调用 C# DataGroup 类(它是 nuget 的一部分),该类包含一个调用 extern 方法的函数。DataGroup 类方法返回一个byte[,]
,但只有在它调用 extern 方法并封送数据之后。
导致访问冲突的版本:
- REST 调用外部方法作为
IntPtr
(IntPtr ptr = FileAccess.getBytes(...);
- 外部方法返回一个
IntPtr
- 发生
AccessViolationException
带有额外类的工作版本:
- 对返回
byte[,]
的数据组方法的 REST 调用。(例如dataGroupInstance.getDataGroupBytes();
- 外部方法称为内部方法
getDataGroupBytes
- extern 方法返回一个
IntPtr
- 方法
getDataGroupBytes
封送来自IntPtr
的数据并返回byte[,]
- 没有错误
基本上,为什么调用 extern 方法直接会导致AccessViolationException
?
想通了。问题是由我的参数引起的 - 我的C++函数在我应该使用const char*
的时候使用了std::string
。我用const char*
替换了所有std::string
实例(它们用作参数),我不再收到异常。
相关文章:
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 堆栈上的 C++ 访问冲突写入异常
- 引发异常:写访问冲突. temp 为 nullptr
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 引发异常:读取访问冲突.**此**0x40错误
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 当我尝试访问结构类型时,我收到 std::bad_variant_access 异常
- 抛出的 Visual Studio 异常:写入访问冲突。q_deck->p_deck 0x110112。C 语言
- Visual Studio图形调试器引发读取访问冲突异常
- C++中的内存分配(引发异常:读取访问冲突)
- 为什么访问模板化变体作为返回值抛出异常
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- 函数引发写入访问异常
- 使用XMVector时的内存访问异常
- 根据CIN类型插入空隙*?始终获取unsigned_char的访问异常
- 如何调试C++非托管代码中的较低级别文件访问异常/崩溃
- log4cxx访问异常,使用<<运算符和宏