日期:2014-05-18  浏览次数:20680 次

C#中怎样定义API中因平台而异的结构体?
例如,TBBUTTON的定义为
C/C++ code

typedef struct {
  int       iBitmap;
  int       idCommand;
  BYTE      fsState;
  BYTE      fsStyle;
#ifdef _WIN64
  BYTE      bReserved[6];
#else 
#if defined(_WIN32)
  BYTE      bReserved[2];
#endif 
#endif 
  DWORD_PTR dwData;
  INT_PTR   iString;
} TBBUTTON, *PTBBUTTON, *LPTBBUTTON;


中间这一段,如果是64位下应该写成
C# code

[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] bReserved;


如果是32位下应该是
C# code

[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] bReserved;


那么这个结构体应该怎么定义呢?

------解决方案--------------------
分平台定义吧,可以把 SizeConst 的值单独定义