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 的值单独定义