我需要定义一个依赖于系统的整数类型,以便与一些低级库兼容。我已经设置了 x86 和 x64 项目配置,并为它们定义了条件编译符号(IA32 和 INTEL64)。
所以,我想做以下事情:
#if IA32
typedef int SysInt;
typedef uint SysUInt;
#elif INTEL64
typedef long SysInt;
typedef ulong SysUInt;
#endif
但是,由于 typedef 在 C# 中不可用,所以这不起作用。实现这个的最佳选择是什么?
提前致谢。最好的问候。
最佳答案
你想要IntPtr
和UIntPtr
,它们在32位进程中是32位,在64位进程中是64位。由于这些类型自动采用进程的“位数”,因此无需条件编译或两个不同的项目配置即可使用它们。
如果你真的想对这些值进行数学运算,你应该将它们转换为 long
或 ulong
来进行数学运算,然后返回到 IntPtr
或 UIntPtr
将它们传递给您的外部库。
关于C# 实现依赖于系统的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5308110/