如何解决CA1901-P/Invoke声明应该是便携式FxCop警告?

问题描述:

我在我的示例中使用了SendMessage本机方法。请看以下的本地方法声明,如何解决CA1901-P/Invoke声明应该是便携式FxCop警告?

[DllImport("user32.dll", CharSet = CharSet.Auto)] 

internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); 

但是当我申报样品中的上述本地方法,它显示的警告(CA1901 - P/Invoke的声明应该是便携式)。它显示了如下警告:“在64位平台上,方法中的参数lParam将为4个字节宽,这是不正确的,因为该API的实际本机声明表示它应该在64位平台上应为8个字节。”

那么如何才能解决这个上面的FxCop警告,也请建议我们如何才能知道基于32位和64位平台的参数的实际大小

+0

它只是告诉你它是一个bug的声明,这是一个常见的错误,让他们添加规则。最后2个参数必须是IntPtr。如果你知道你的程序只能运行在32位模式下,并且知道这将永远是真的,那么它并不重要。 –

应使用如下声明:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);