【发布时间】:2012-03-26 00:58:46
【问题描述】:
我正在寻找一种 C# 整数数据类型,它可以在 32 位机器上保存 32 位有符号值,在 64 位机器上保存 64 位有符号值。
原因是对接收 ssize_t 参数的 C 函数的 P/Invoke 调用。
我知道我可以使用预处理器指令为不同的机器以不同的方式“DllImport”这个函数(对于 32 位机器使用 ints,对于 64 位机器使用 longs),但这需要我为不同的目标构建和运输,这是非常不可取的。
当然,非常欢迎任何其他解决此问题的方法:D
【问题讨论】:
-
@Marcelo - 我想你在找
IntPtr -
另一个简单的解决方案是始终向您的 C 代码发送 64 位值。您似乎没有说明无法完成此操作的原因。
-
ssize_t不是 C 标准的一部分,但带有 POSIX。对于 C,您有intptr_t或更好的uintptr_t,它是一个整数类型,可以保存与指针相同的信息。它不一定存在(如果目标机器上没有这种类型),但通常确实存在。
标签: c# c pinvoke 32bit-64bit