【发布时间】:2014-06-23 10:27:14
【问题描述】:
我的代码如下所示
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern uint SendMessage(IntPtr hWnd, int unMsg, IntPtr wParam,
IntPtr lParam);
Fxcop 错误:“正如您在代码中声明的那样,P/Invoke 'SendMessage(IntPtr, int, IntPtr, IntPtr)' 的返回类型在 64 位平台上将是 4 字节宽。这是不正确的,因为此 API 的实际本机声明表明它在 64 位平台上应为 8 字节宽。请参阅 MSDN 平台 SDK 文档以帮助确定应使用哪种数据类型而不是 'uint'"
所以要修复上述错误,我需要更改返回类型 UIntPtr 吗?
请帮我解决这个问题并给我正当的理由。
谢谢, 虚拟机
【问题讨论】:
-
这是一个完全正确的警告。返回类型必须是
IntPtr。 -
SendMessage必须是本机 API 中最频繁的 P/Invoked 方法之一。因此,pinvoke.net 上的注释似乎非常好和准确。