在c#中编组c结构

我有一个’C”DLL’可以将结构作为输入,我必须从我的c#程序中调用该DLL

以下是我在c中的示例结构,我必须在我的c#代码中编组这些结构

我在做对还是错?

实际C结构:

typedef struct procedure { char code[8]; }procedure; typedef struct datefield { char date[10]; }datefield; typedef struct p45_clsgs { procedure p45_clsg; datefield p45_clsgdte; }p45_clsgs; 

C#:

 [StructLayout(LayoutKind.Sequential), Serializable] struct procedure { //char code[]; [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 8)] public string code; } [StructLayout(LayoutKind.Sequential), Serializable] struct datefield { //char date[10]; [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 10)] public string date; } struct p45_clsgs { public procedure p45_clsg; public datefield p45_clsgdte; } 

我的C#结构对于C结构是否正确?

什么是fallowing c结构的等效C#结构

 typedef struct p45_cldxed24 { procedure p45_cldxed[8]; }p45_cldxed24; 

(抓我原来的答案)

你需要在每个结构的顶部有这个:

 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 

请注意CharSet命名参数。 这很重要,否则你最终会使用wchar_t数组而不是char数组。

鉴于你不知道它是否有效,很难肯定地说! 无论如何,它看起来对我来说是正确的。

我的建议是简单地测试你在这里展示的结构,确保它看起来像你期望的那样运行。 然后开始创建其他100个左右的结构。

如果有帮助,请查看Marshal C ++ struct array到C#及其中的链接。