2017-08-04 25 views
0

我在我的示例中使用了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位模式下,並且知道這將永遠是真的,那麼它並不重要。 –

回答

0

應使用如下聲明:

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