用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#