delphi - puede - se cargo el modulo pero no se encontro el punto de entrada dllregisterserver
¿Es posible acceder a un dll de 64 bits desde una aplicación de 32 bits? (4)
Mientras la DLL de 64 bits se cargue por un proceso separado de 64 bits, y toda la comunicación entre el proceso de 32 bits y la DLL de 64 bits se realice a través de mecanismos similares al IPC de acoplamiento suelto que el sistema operativo puede administrar, entonces sí puedo hacer eso.
He hecho algo similar. Una aplicación de 32 bits necesitaba un complemento de cola de impresión personalizado implementado en una DLL. La aplicación y el complemento de cola de impresión se comunican a través de los mecanismos de IPC (una forma elegante de decir archivos temporales, en este caso).
En los sistemas de 64 bits, todo lo relacionado con la aplicación de 32 bits funcionaba bien, excepto que Print Spooler se negó a cargar el archivo DLL complementario, porque el Print Spooler era, por supuesto, un proceso de 64 bits.
La solución fue tan simple como reconstruir solo el complemento de Spooler en 64 bits. No es necesario cambiar toda la aplicación de 32 bits.
Tengo una aplicación Delphi similar a Taskbar Shuffle que incluye un enlace dll.
EDITAR : esta DLL gancho se comunica con la aplicación principal mediante el envío de mensajes de Windows.
Quiero agregar soporte para XP y Vista x64 y mi idea inicial fue convertir el dll a 64 bits (compilándolo con FreePascal) pero mantener la aplicación de 32 bits por ahora (Delphi).
¿Es posible que una aplicación de 32 bits acceda a un dll de 64 bits?
EDIT2 : estoy cargando el dll a través de LoadLibrary, así que supongo que estoy atascado, ya que un proceso de 32 bits no podrá cargar un dll de 64 bits, de acuerdo con lo que leí en el enlace apuntado por Lars Truijens en uno de las respuestas a continuación.
No, pero tal vez puedas evitar eso usando COM. Si ejecuta el dll dentro de un objeto COM que se ejecuta como un proceso independiente, y se comunica con interfaces Marshallable (por ejemplo, interfaces compatibles con automatización), debería funcionar. No siempre es factible, según lo que haga el dll y cuán extensas sean las superficies de integración y de llamada, pero es una opción que debería ser capaz de hacer posible ese escenario.
No. Tendrás que compilar dos versiones: 64 bits y 32 bits.
Acabo de descubrir esta solución, de CodeCentral: http://cc.embarcadero.com/Author/802978
Permite llamar a cualquier biblioteca de 64 bits desde código de 32 bits.
Es una solución compleja, ejecutando un ejecutable escrito de 64 bits en segundo plano y luego comunicándose con él usando archivos mapeados en memoria y mensajes GDI de Windows para iniciar algunas funciones de 64 bits de un proceso Delphi de 32 bits.
Hay un ejemplo que puede cargar cualquier biblioteca de 64 bits y luego llamar a cualquier función de esta biblioteca desde un ejecutable de 32 bits.
Parece que funciona bien. En todos los casos, el código vale la pena mirarlo: ¡es técnico, pero está bien diseñado!