2011-07-21 22 views
6

Kiedy dodać następujące wiersze do mojego koduNET Przenośność Ostrzeżenie: Deklaracje CA1901 pinvoke powinno być przenośne

[DllImport("user32.dll")] 
static extern void keybd_event(byte key, byte scan, int flags, int extraInfo); 

i uruchomić analizę kodu przed Microsoft Podstawowe zasady poprawności, otrzymuję ostrzeżenie CA1901. Zasadniczo narzeka na czwarty parametr intextraInfo działa poprawnie na platformie 32-bitowej, ale 64-bitowy typ liczb całkowitych jest oczekiwany na platformie 64-bitowej.

Kiedy zmodyfikowany kod do długoextraInfo, 64-bitowa platforma wymaganie jest spełnione, ale platforma 32-bitowa spodziewa się 32-bitową liczbę całkowitą.

Jak rozwiązać ten dylemat bez tłumienia ostrzeżenia?

Odpowiedz

4

Dzięki zastosowaniu IntPtr który jest specyficzny rodzaj platformy, która jest używana do reprezentowania wskaźnik lub uchwyt:

[DllImport("user32.dll")] 
static extern void keybd_event(byte key, byte scan, int flags, IntPtr extraInfo);