2017-08-04 30 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 /呼び出し宣言は移植する必要があります)。 「このメソッドのパラメータlParamは、64ビットプラットフォームで4バイト幅になります。このAPIの実際のネイティブ宣言は、64ビットプラットフォームでは8バイト幅である必要があることを示しています」

だから我々は、FxCopの警告の上、これを解決することができますどのように、また、私たちは実際の32ビットに基づいてパラメータの大きさと、64ビット・プラットフォームを知ることができる方法を提案してください

+0

バグの宣言で、ルールを追加するのに十分な間違いがあることを伝えるだけです。最後の2つの引数はIntPtrでなければなりません。あなたのプログラムは32ビットモードでのみ実行され、これが永遠になることを知っていれば、問題ではありません。 –

答えて

0

あなたは次の宣言を使用する必要があります?

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