2010-05-17 20 views
2

在C#中,当弄乱那个系统的DLLImport /(非托管?)代码的东西时,我在某处读到使用Int32确切类型而不是int是很重要的。这是真的?有人可以详细说明为什么这么做很重要吗?显然,在使用DLLImport的东西时,使用Int32而不是int很重要?

+2

你碰巧记得你在哪里阅读它?如果你可以发布链接,这将是有趣的。 – 2010-05-17 23:42:05

+0

相关:[62503](http://stackoverflow.com/questions/62503/c-int-or-int32-should-i-care) – hemp 2010-06-03 06:50:27

回答

1

我不相信这是真的。 intInt32的别名。它们意味着完全相同的东西,并将编译到相同的IL。

可以找到别名列表here

6

我认为你更有可能读到使用IntPtr而不是int。正如其他人所说,intInt32是等同的。

这是不是真的到32位系统上交换intIntPtr,因为它们具有相同的尺寸(4个字节)中的问题。问题出现在64位系统上时 - 如果使用int而不是IntPtr,则它现在的大小错误(4个字节而不是8个字节),并且可能会导致错误。

+0

错误地使用IntPtr可能是一个问题,出于同样的原因。 如果你编组的类型是一个整数,你应该使用Int32(或它的别名)。如果你编组的类型是一个指针,你应该使用IntPtr。使用IntPtr编组整数会产生问题,因为在64位Windows上,整数仍然是32位(4字节)。同样,使用整数来封送指针会产生问题。 始终使用正在编组的本机类型的正确托管类型,反之亦然。 – hemp 2010-05-18 00:30:42

相关问题