2012-02-18 29 views
2
[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

あなたの質問は何ですか? –

+0

CからWindowsをターゲットにしていますか? –

+0

私は窓を目指しています –

答えて

6

メンバーの内容に定義されている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; 
} 

基本的にはあなたがそのサイズが異なります(通常は)それは内容のものより大きな構造体を作成しようとしている場合を除きStructLayoutSizeConstを指定しないでください

  • を変更したいと考えています。これは、この
  • MarshalAsは通常、プリミティブ型のPInvokeポインタ型へ
  • 使用IntPtrUIntPtrには必要ありません行うには非常に一般的ではありません。それらは32ビットと64ビットのプラットフォームの間でサイズが適切に異なります
+0

ありがとうございました。まさに私が探していたもの。 –