我的代码如下
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern uint SendMessage(IntPtr hWnd, int unMsg, IntPtr wParam,
IntPtr lParam);
Fxcop错误:“正如在代码中声明的那样,在64位平台上,P / Invoke'SendMessage(IntPtr,int,IntPtr,IntPtr)的返回类型将是4字节宽。这是不正确的,因为此API的实际本机声明表明它在64位平台上应该是8字节宽。请参阅MSDN Platform SDK文档以获取帮助确定应使用哪种数据类型而不是'uint'“
所以要修复上面的错误,我需要更改返回类型UIntPtr吗?
请帮我解决这个问题,并给我正当理由。
谢谢, VMG
答案 0 :(得分:1)
消息是正确的。该函数返回LRESULT
,它是一个带符号的指针大小类型。所以在C#中你应该使用IntPtr
。
严格来说,邮件参数是未签名的,WPARAM
是未签名的,LPARAM
已签名,因此如果您希望效仿,那么您将拥有:
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SendMessage(
IntPtr hWnd,
uint Msg,
UIntPtr wParam,
IntPtr lParam
);
此信息全部记录在案:
但是,因为SendMessage
是一种适合所有类型的函数,所以不值得在签名和无符号类型上挂起。不同的消息使用强制转换以不同方式处理参数。因此,请随意使用最方便的类型,模块化它们必须明确的尺寸。