.NET 可移植性警告 : CA1901 PInvoke Declarations Should Be Portable

标签 .net pinvoke code-analysis portable-applications

当我将以下行添加到代码中时

[DllImport("user32.dll")]
static extern void keybd_event(byte key, byte scan, int flags, int extraInfo);

并根据Microsoft 基本正确性规则运行代码分析,我收到 CA1901 警告。 基本上,它提示第四个参数 int extraInfo 在 32 位平台上工作正常,但在 64 位平台上需要 64 位整数类型。

当我将代码修改为 long extraInfo 时,满足了 64 位平台要求,但 32 位平台需要 32 位整数。

如何在不抑制警告的情况下解决这个困境?

最佳答案

通过使用 IntPtr这是特定于平台的类型,用于表示指针或句柄:

[DllImport("user32.dll")]
static extern void keybd_event(byte key, byte scan, int flags, IntPtr extraInfo);

关于.NET 可移植性警告 : CA1901 PInvoke Declarations Should Be Portable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6784082/

相关文章:

c# - 如何创建 `ExpressionType.IsTrue/IsFalse` ?

c# - 在汇编中更新类/IL

resharper - 如何在命名空间级别使用 [UsedImplicitly] 属性?

msbuild - 如何在 TeamCity 中运行 VS 2015 代码分析?

dependency-injection - 在实现 IDependencyResolver 和 IDependencyScope 的类中应如何编码 Dispose?

c# - 直接在磁盘上打开 XML 导出数据表到 excel

.net - 复杂 UI 上的批量更新

c# - 将 C DLL 包含到 C# 中时,对 PInvoke 函数的调用使堆栈不平衡

c# - C# 中的 PInvoke DLL

c# - 在保留结构的同时编码(marshal)它 "unmanaged"