首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#中怎样定义API中因平台而异的结构体?解决方案

2012-05-27 
C#中怎样定义API中因平台而异的结构体?例如,TBBUTTON的定义为C/C++ codetypedef struct {intiBitmapintid

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

热点排行