Debe no necesidad de cambiar la firma/nombre de la DLL que se vincula al llamar a las funciones USER32.DLL.
A pesar de la convención de nomenclatura, en una máquina con Windows de 64 bits, el archivo USER32.DLL que se encuentra en [Windows] \ System32 es en realidad una DLL de 64 bits. La real versión de 32 bits de USER32.DLL en realidad se encuentra en una carpeta llamada [Windows] \ SysWow64.
Consulte this question para obtener más información.
Lo único que probablemente deba tener más cuidado es los tipos de datos que transfiere como parámetros a las distintas funciones de la API de Windows. Por ejemplo, la función "SendMessage" dentro de USER32.DLL tiene un requisito específico con al menos uno de sus parámetros (de acuerdo con page on P/Invoke).
Es firma es:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
y toma nota de 2 & 3 a continuación claramente:
2) utilice NUNCA "int" o "entero" como lParam. Su código se bloqueará en Windows de 64 bits . SOLO use IntPtr, una estructura "ref" o una estructura "out".
3) NUNCA utilice "bool", "int" o "entero" como valor de retorno. Su núcleo se bloqueará en Windows de 64 bits. SOLAMENTE use IntPtr. No es seguro usar bool - pInvoke no puede ordenar un IntPtr en un booleano.
Este "salvedad" parece ser específica para esta función particular (SendMessage), aunque es algo que me prestar especial atención a la hora de llamar en cualquier funciones API de Windows.
Dios mío, la forma en que la página describe cómo los sistemas de archivos ven los cambios entre las aplicaciones de 64/32 bits es bastante aterrador de ver. Muchas gracias por su respuesta, Pete. –
De nada. Estoy contento de ayudar. –