对c#中的c结构进行编组
本文关键字:结构 中的 | 更新日期: 2023-09-27 18:23:37
我有一个'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结构正确吗?
闲置的C结构的等效C#结构是什么
typedef struct p45_cldxed24
{
procedure p45_cldxed[8];
}p45_cldxed24;
(改写我的原始答案)
你需要在每个结构的顶部都有这个:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
注意CharSet
命名参数。这很重要,否则您将使用wchar_t数组而不是char数组。
很难说,因为你不知道它是否有效!无论如何,它在我看来是正确的。
我的建议是简单地测试一下你在这里展示的结构,确保它看起来像你预期的那样运行。然后开始创建其他100个左右的结构。
如果有帮助的话,可以看看将C++结构数组Marshal到C#中以及其中的链接。