读书人

C#中怎样定义API中因平台而异的结构体

发布时间: 2012-05-27 05:42:30 作者: rapoo

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

读书人网 >C#

热点推荐