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

use*_*890 2 .net 64-bit pinvoke x86 winapi

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

BOOL MessageBeep(UINT uType); // from User32.dll
Run Code Online (Sandbox Code Playgroud)

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

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

[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
Run Code Online (Sandbox Code Playgroud)

这个代码C#在Windows x64下运行吗?

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

SLa*_*aks 5

你错了.

但是,对于类似于类型的类型HANDLE,您应该使用IntPtr.

如果你不确定P/Inoke声明,首先要检查的是这里.