P / Invoke在32位和64位系统上

时间:2010-03-15 13:28:33

标签: .net winapi x86 pinvoke 64-bit

我们选择以下Win API调用作为示例:

BOOL MessageBeep(UINT uType); // from User32.dll

输入参数是UINT来指定蜂鸣声类型,它可以是32位和64位整数,具体取决于我们称之为哪个Windows版本(或我错了?)。

如果我想从C#调用P / Invoke消息,那么我应用DllImport声明:

[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);

此代码C#是否可以在Windows x64下运行?

  • 如果是,为什么调用32位整数调用是可以的,而预期是64位整数(假设我对此是正确的)?
  • 如果不是,那么在C#中,适当的平台不可知P / Invoke声明应该如何?

1 个答案:

答案 0 :(得分:5)

你错了。

但是,对于像HANDLE这样的类型,它们的位数会有所不同,您应该使用IntPtr

如果您不确定P / Inoke声明,首先要检查的是here