.NET 可移植性警告:CA1901 PInvoke 声明应该是可移植的

发布于 2024-11-25 16:37:45 字数 413 浏览 2 评论 0原文

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

[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 位整数。

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

When I add the following lines into my code

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

and run a code analysis against Microsoft Basic Correctness Rules, I get a CA1901 warning.
Basically, it complains the 4th parameter int extraInfo works fine on a 32-bit platform but a 64-bit integer type is expected on 64-bit platform.

When I modified the code into long extraInfo, the 64-bit platform requirement is met but the 32-bit platform is expecting a 32-bit integer.

How to solve this dilemma without suppressing the warning?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妥活 2024-12-02 16:37:45

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

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

By using an IntPtr which is a platform-specific type that is used to represent a pointer or a handle:

[DllImport("user32.dll")]
static extern void keybd_event(byte key, byte scan, int flags, IntPtr extraInfo);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文