我有一个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 ++中的这个函数中得到一个异常..
异常是“尝试读取写入受保护的内存”。除了这个结构,一切都很好。请建议任何解决方法。
答案 0 :(得分:0)
实际上问题是IntPtr的分配不当。我使用的是Marshal.Sizeof(abc)而不是我应该使用sizeof(STRUCTURE)。通过执行此更改,我成功地在C ++中获取struct参数。