簡體   English   中英

如何將C#結構轉換為C結構?

[英]How to convert C# struct to C struct?

[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#結構。 如果是這樣,那么我相信您需要以下內容

[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 ,除非您嘗試創建一個大小(通常)大於其內容的結構。 這樣做不是很常見
  • 基本類型通常不需要MarshalAs
  • 使用IntPtrUIntPtr來調用指針類型。 它們的大小在32位和64位平台之間適當變化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM