答案 0 :(得分:2)
在C#中定义结构
在C#中定义结构时,请确保使用与C ++实现匹配的数据类型。 C ++中的字符串作为C#中的Byte ...
您需要添加一些属性以确保C#中的结构内存布局与C ++实现匹配
[StructLayout(LayoutKind.Sequential, Size=TotalBytesInStruct),Serializable]
public struct MyStruct
{
}
传递结构
使用相同的数据结构在C#中声明结构。将指向结构的指针从C ++传递给C#app,并将其转换为C#中的新结构。
致电C#dll
要调用C#DLL,最好的选择是在C ++中使用混合模式程序集。这允许您使用编译语managed
和unmanaged
在本机代码和托管代码之间切换。这样你就可以很好地用C ++包装一个可行的C ++包装器。见Microsoft article。请注意,Mono不支持此功能。
答案 1 :(得分:0)
是的,支持结构并且可以使用。但是,字符串可能需要一些工作。
答案 2 :(得分:0)
告诉我们你的结构。 C#有marshaller帮助器可以轻松地将其类型映射到本机c ++类型,你只需要知道如何装饰你的类型,如果你向我们展示你的结构,我们可以帮助你。
例如,您提到的LPDATA事件,如果是char *
,它会直接映射到C#中的byte[]
(如果它是通用缓冲区),或string
如果它是普通字符串( string
映射需要marshaller帮助,但一旦正确装饰,它就会更容易使用。)
答案 3 :(得分:0)
您可以通过"platform invoke tutorial"上的MSDN了解更多信息。 唯一的区别是你将调用自己的DLL:)