我是一个64位进程,我的int
大小为8字节。
我引用的dll是编译成32位的。
这个dll有一个接受int
参数的函数。
会发生什么?
我将8字节
发送到一个4字节
的“容器”中?
在64位/C#中,int
仍然是4个字节。
在C#中,int
始终只是global::System.Int32
的别名。
会改变的是引用大小和指针大小,但这一切都被IL抽象化了——不需要做任何改变。请注意,CLI只能是32位xor(nand?)64位。您可能需要其中一个为"Any CPU"。
int
或Int32
始终为32位,而long
或Int64
始终为64位。int
在 C# 中始终为32位(4字节),但在其他一些语言如C++中不是这样。
System.IntPtr
在x86机器上为4字节,在64位操作系统上为8字节。如果您想要使用依赖于操作系统的整数类型,请使用它。
IntPtr
类型,根据其Size
属性,它实际上会根据使用的 CLI 而改变大小。正如 Marc 在他的回答中所述,指针和引用变得更大(因为它们显然必须适应 64 位地址空间)。 - Adam Houldsworth