È necessario non necessario modificare la firma/nome della DLL a cui si collega quando si chiama in USER32.DLL funzioni.
Nonostante la convenzione di denominazione, su un computer Windows a 64 bit, il file USER32.DLL che si trova in [Windows] \ System32 è in realtà una DLL a 64 bit. La versione reale a 32 bit di USER32.DLL si trova in realtà in una cartella denominata [Windows] \ SysWow64.
Per ulteriori informazioni, vedere this question.
L'unica cosa che probabilmente dovrete prestare molta attenzione sono i tipi di dati che passate come parametri alle varie funzioni dell'API di Windows. Ad esempio, la funzione "SendMessage" in USER32.DLL ha un requisito specifico con almeno uno dei suoi parametri (in base allo page on P/Invoke).
E 'firma è:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
e note 2 & 3 di seguito indicare chiaramente:
2) utilizzare MAI "int" o "intero", come lParam. Il tuo codice si bloccherà sulle finestre a 64 bit . SOLO utilizzare IntPtr, una struttura "ref" o una struttura "out".
3) NON utilizzare MAI "bool", "int" o "numero intero" come valore di ritorno. Il core si bloccherà nelle finestre a 64 bit. SOLO usare IntPtr. Non è sicuro usare il valore bool - pInvoke non può effettuare il marshalling di un IntPtr su un valore booleano.
Questa "caveat" sembra essere specifico per questa particolare funzione (SendMessage), anche se è qualcosa che avrei prestare particolare attenzione al momento della chiamata in eventuali funzioni API di Windows.
Mio Dio gentile, il modo in cui la pagina descrive come la visualizzazione del filesystem cambia tra le applicazioni a 64/32 bit è piuttosto spaventosa da vedere. Grazie mille per la tua risposta Pete. –
Prego. Sono felice di aiutare. –