将数据结构从VC ++传递到C#?

时间:2009-11-03 09:32:45

标签: c# visual-c++

我想将数据结构传输到在C#中创建的应用程序。 我将在VC++程序中填写结构。

我该怎么发送? 结构是否支持C#?

否则,如果我在VC ++中使用LPDATA:我怎样才能在C#中使用相同的东西?

4 个答案:

答案 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 ++中使用混合模式程序集。这允许您使用编译语managedunmanaged在本机代码和托管代码之间切换。这样你就可以很好地用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:)