用C#编写固定大小的2D char数组的C ++ Struct

我有一个c ++ DLL有一个接受结构指针的公共函数。 我正在使用此DLL到C#(VS 2010,生成类型x86,允许不安全的代码)。

我需要的编组结构是作为成员参数具有多个结构,并且此成员参数结构需要像C ++一样具有固定大小的2D char数组。 我按照以下提到的Stack Overflow和MSDN论坛链接的建议来实现这个结构:

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

将C ++二维固定长度的char数组作为结构成员进行封装。

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

例外是“尝试读取写保护的内存”。 除了这个结构,一切都很好。 请提出任何解决办法。


其实问题在于IntPtr的分配不当。 我使用Marshal.Sizeof(abc)而不是我应该使用sizeof(STRUCTURE)。 通过这样做,我成功地获得了C ++中的struct参数。

链接地址: http://www.djcxy.com/p/66603.html

上一篇: Marshaling a C++ Struct with fixed size 2D char array from C#

下一篇: Marshalling C++ struct with a int* member to C#