2012-02-18 3 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# struct를 C struct로 변환하는 방법은 무엇입니까?

+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 포인터 타입에
  • 사용 IntPtr 또는 UIntPtr 필요하지 않습니다 할 매우 일반적인 아닙니다. 32-64 비트 플랫폼에서 크기가 적절하게 다릅니다.
+0

대단히 감사합니다. 정확히 내가 무엇을 찾고 있었는지. –

관련 문제