2017-08-04 6 views
0

Ich habe die native Methode SendMessage in meinem Beispiel verwendet. Sie finden die native Methode Erklärung untenWie löst man die CA1901 - P/Invoke Deklarationen sollte portable FxCop Warnung sein?

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

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

Aber wenn die oben native Methode in meiner Probe erklären, es zeigt die Warnung (CA1901 - P/Invoke Erklärungen sollten tragbar sein). Es zeigt die Warnung wie "der Parameter lParam in Methode ist 4 Bytes breit auf 64-Bit-Plattformen. Dies ist nicht korrekt, wie die tatsächliche native Deklaration dieser API angibt, dass es 8 Bytes auf 64-Bit-Plattformen sein sollte.

So

, wie wir dies oben FxCop Warnung lösen können, und bitte auch vorschlagen, wie wir die tatsächliche Größe der auf den 32-Bit und 64-Bit-Plattformen auf Basis Parameter kennen, können

+0

Es sagt nur, es ist eine fehlerhafte Deklaration, ein häufig genug Fehler, um sie dazu zu bringen, die Regel hinzuzufügen. Die letzten 2 Argumente müssen IntPtr sein. Wenn Sie das wissen Ihr Programm wird immer nur im 32-Bit-Modus laufen und wissen, dass dies für immer wahr sein wird, dann spielt es keine Rolle. –

Antwort

0

Sie sollen die folgende Erklärung verwenden:

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