我一直在查看Windows 数据类型列表,因为我试图弄清楚每种类型如何映射到它的等效 .NET 类型。
我注意到一些类型定义被#if 标签包围,这会根据平台更改它们的定义。
例如,这里是定义INT_PTR
#if defined(_WIN64)
typedef __int64 INT_PTR;
#else
typedef int INT_PTR;
#endif
我的理解是,这会在 64INT_PTR
位机器上创建 64 位,INT_PTR
在 32 位机器上创建 32 位。好的....NET 在这方面做同样的事情,IntPtr
并且UIntPtr
是特定于平台的,因此适应 32 位和 64 位机器。
现在,让我们考虑LONGLONG
#if !defined(_M_IX86)
typedef __int64 LONGLONG;
#else
typedef double LONGLONG;
#endif
所以在.NET中我的假设是这映射到Int64
( long
) ?
另外,考虑TCHAR
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
我的假设是这映射到 char (因为 .NET 的 char 无论如何都是 unicode)?
问题:
- 如果本机类型依赖于平台,它的 .NET 等效项是否应该是两个定义中较大的一个?
- 映射数据类型时是否有任何已知的陷阱?