2009-11-03 43 views
2

我想将一个数据结构转移到在C#中创建的应用程序。 我将填充VC++程序中的结构。将数据结构从VC++传递到C#?

我该如何发送? 在C#中支持结构吗?

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

回答

2

定义在C#中的结构

当定义在C#中的结构确保使用符合C++实现其数据类型。字符在C++与C#等字节......

您需要添加一些属性,以确保在C#中的结构体内存布局的C匹配++实现

[StructLayout(LayoutKind.Sequential, Size=TotalBytesInStruct),Serializable] 
public struct MyStruct 
{ 
} 

薪火结构

申报C#中使用相同数据结构的结构。将指向该结构的指针传递给C#应用程序,并将其转换为C#中的新结构。

你调用C#DLL

唤起你的C#DLL,最好的选择是在C使用混合模式汇编++。这使您可以使用编译managedunmanaged在本机代码和托管代码之间切换。通过这种方式,您可以很好地将C#类包装为一个可用的C++包装器。看到这个Microsoft article。但请注意,这在Mono上不受支持。

0

是的,结构是支持和可以使用的。然而,字符串可能需要一些工作。

0

向我们展示您的结构。 C#有编组助手可以很容易地将它的类型映射到本地C++类型,你只需要知道如何装饰你的类型,如果你向我们展示你的结构,我们可以帮助你。

例如,您提到的lpData的事情,如果这是char *,它直接通过byte[]在C#中映射,如果它是一个通用的缓冲区,或者string如果它是一个正常的字符串(string映射需要编组的帮助,但它是一个更容易一次正确装饰使用)。