如何将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结构?

+0

你的问题是什么? – 2012-02-18 22:11:16

+0

您是否从C定位Windows? – 2012-02-18 22:11:50

+0

我以Windows为目标 – 2012-02-18 22:14:25

这听起来像你正在试图获取成员内容中定义的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除非你正在试图创造更大的一个结构,其大小是不同的(典型值)比它的内容。这不是很常见的做的不是通常所需要的基本类型
  • 使用IntPtrUIntPtr到PInvoke的指针类型此
  • MarshalAs。它们在32和64位平台之间大小不同
+0

非常感谢。正是我在找什么。 – 2012-02-18 22:26:13