使用C#中固定大小的2D char数组封存C ++ Struct

时间:2015-02-03 06:05:49

标签: c# c++ marshalling

我有一个c ++ DLL,它有一个接受结构指针的公共函数。 我正在将此DLL用于C#(VS 2010,Build Type x86,允许不安全的代码)。

我需要编组的结构是有一个结构作为成员参数,这个成员参数结构需要C ++像固定大小的2D char数组。我已经按照Stack Overflow和MSDN论坛链接的建议实现了这个结构,如下所述:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/d1618999-8448-46ef-9788-4b18a62d25ea/marshaling-a-c-twodimensional-fixed-length-char-array-as-a-structure-member

Marshaling a C++ two-dimensional fixed length char array as a structure member

最后我使用Intptr变量xyz并使用AllocHglobal(Marshal.Sizeof(abc))分配内存和Marshal.StructtoPointer(abc, xyz, false),然后在C ++ dll函数调用中传递xyz当我在2D memset上尝试char[][] struct时,我在C ++中的这个函数中得到一个异常..

异常是“尝试读取写入受保护的内存”。除了这个结构,一切都很好。请建议任何解决方法。

1 个答案:

答案 0 :(得分:0)

实际上问题是IntPtr的分配不当。我使用的是Marshal.Sizeof(abc)而不是我应该使用sizeof(STRUCTURE)。通过执行此更改,我成功地在C ++中获取struct参数。