.net - 32 位和 64 位系统上的 P/Invoke

标签 .net winapi x86 pinvoke 64-bit

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

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

输入参数是 UINT 来指定蜂鸣类型,可以是 32 位和 64 位整数,具体取决于我们调用它的 Windows 版本(还是我错了?)。 p>

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

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

这段 C# 代码可以在 Windows x64 下运行吗?

  • 如果是,为什么可以调用 32 位整数,而需要 64 位整数(假设我对此是正确的)?
  • 如果不是,正确的平台无关 P/Invoke 声明在 C# 中应该是什么样子?

最佳答案

你错了。

但是,对于像 HANDLE 这样随位数变化的类型,您应该使用 IntPtr

如果您不确定 P/Inoke 声明,请首先检查 here .

关于.net - 32 位和 64 位系统上的 P/Invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2447410/

相关文章:

c# - 获取连续的整数列表

c# - .NET 命令提示符 "where"命令的等价物

c# - 如何以编程方式更改 Windows 10 任务栏图标大小

C 检查两个字符串是否相同

assembly - 在 x86 汇编中测试负数的最紧凑方法?

assembly - 带参数的函数调用

c# - 在表中查找符合特定条件的最新记录

java - 如何解密在.net中加密的java文件

c++ - StartServiceCtrlDispatcher 无法访问 1063 错误

linux nasm程序集查找变量中保存的位数