编组时尝试将int []从c ++转换为C#失败

时间:2019-05-16 23:46:34

标签: c# c++ pinvoke marshalling

我有以下c ++代码。

om_out

并遵循C#P /调用层代码

exten "C" int * read_array_adapter() {  

      int * retval =  read_array().data();
      return retval;
}

绑定得很好。现在在运行时,我有以下代码调用该方法:

[DllImport(@"/sharedlibrary.so",CallingConvention = CallingConvention.Cdecl)]                                
 public extern static IntPtr read_array_adapter();

它失败并出现以下错误:

var ptr = read_array_adapter(); var arrayLength = Marshal.ReadInt32(ptr);

我四处搜寻以查找可能的原因,但没有找到任何泄漏信息。

一些想法:

  1. 当我执行ptr.ReadByte()时,它不会失败,但是它读取的每个字节的值均为0
  2. 这使我认为,如果编译器有可能将内存重新用于其他用途(或者只是释放了对象)
  3. 此外,由于C ++函数已经返回,因此不应该从堆栈中释放它吗?如果是这样,基于指针的P /调用将如何工作?

如果不是这样,可能是什么导致我的代码失败?我想念什么吗?

0 个答案:

没有答案