如何将C#结构转换为C结构?
问题描述:
[StructLayout(LayoutKind.Sequential, Size = 280), Serializable]
public struct AESContext
{
/// int nr;
[MarshalAsAttribute(UnmanagedType.I4, SizeConst = 4)]
public int nr;
/// unsigned long *rk;
[MarshalAsAttribute(UnmanagedType.U4, SizeConst = 4)]
public uint rk;
// unsigned long buf[68];
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 68)]
public uint[] buf;
}
这是C#结构我到目前为止。评论上方每个字段是在C类型。 如果有人可以验证,我会爱。如何将C#结构转换为C结构?
答
这听起来像你正在试图获取成员内容中定义的C结构的C#结构。如果是这样的话,我相信你想以下
[StructLayout(LayoutKind.Sequential), Serializable]
public struct AESContext
{
/// int nr;
public int nr;
/// unsigned long *rk;
public UIntPtr rk;
// unsigned long buf[68];
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 68)]
public uint[] buf;
}
基本改变
- 不要在
StructLayout
指定SizeConst
除非你正在试图创造更大的一个结构,其大小是不同的(典型值)比它的内容。这不是很常见的做的不是通常所需要的基本类型 - 使用
IntPtr
或UIntPtr
到PInvoke的指针类型此 -
MarshalAs
。它们在32和64位平台之间大小不同
+0
非常感谢。正是我在找什么。 – 2012-02-18 22:26:13
你的问题是什么? – 2012-02-18 22:11:16
您是否从C定位Windows? – 2012-02-18 22:11:50
我以Windows为目标 – 2012-02-18 22:14:25