我需要定义一个依赖于系统的整数类型,以便与某些低级库相兼容。我已经设置了x86和x64项目配置,并为它们定义了条件编译符号(IA32和INTEL64)。
所以,我想做以下事情:
#if IA32
typedef int SysInt;
typedef uint SysUInt;
#elif INTEL64
typedef long SysInt;
typedef ulong SysUInt;
#endif
但是,由于typedef在C#中不可用,因此不起作用。实现这个的最佳选择是什么?
提前致谢。最好的问候。
答案 0 :(得分:11)
您需要IntPtr
和UIntPtr
,它们在32位进程中为32位,在64位进程中为64位。由于这些类型自动采用进程的“位数”,因此不需要条件编译或两个不同的项目配置来使用它们。
如果你真的想对数值进行数学运算,你应该将它们转换为long
或ulong
进行数学计算,然后再转回IntPtr
或{{1}将它们传递给外部库。
答案 1 :(得分:3)
您可以尝试别名:
#if IA32
using SysInt = System.Int32;
#elif INTEL64
using SysInt = System.Int64;
#endif
答案 2 :(得分:3)
似乎你可以做到这样的事情,至少:
#if IA32
using SysInt = System.Int32;
using SysUInt = System.UInt32;
#elif INTEL64
using SysInt = System.Int64;
using SysUInt = System.UInt64;
#endif
这只是给你的类型别名。我不知道这对你的目的有多大用处,但它确实有用。
答案 3 :(得分:0)
#if IA32
public struct Sys
{
public int Int { get; set; }
}
#elif INTEL64
public struct Sys
{
public long Int { get; set; }
}
#endif