tengo un problema, intento resolverlo desde ayer pero no tuve suerte. tengo 32 bit delphi dll que quiero importar en .NET Win Application. esta aplicación debe ser desarrollada en CUALQUIER modo de CPU. por supuesto, viene BadImageFormatException, lo que significa que en la aplicación x64 no se puede cargar x86 dll ... busqué en Google y encontré una solución, decía que tenía que hacer un wrapper, pero no estaba claro para mí. ¿Alguien puede decir cómo resolver este problema, hay alguna manera posible de importar 32 bits de Delphi DLL en el programa incorporado Cualquier CPU o modo x64 (tal vez otra solución).importación de 32 bits dll en 64 bit. Aplicación de red
Respuesta
Una idea general podría ser envolver su DLL (no administrada) de 32 bits con un dll de contenedor administrado de 32 bits y hacer que COM sea visible. Esto permite realizar llamadas a su contenedor DLL a través de su interfaz COM.
Puede usar un sustituto COM para hacer que su dll COM aparezca como un servidor COM fuera de proceso. Eche un vistazo a esta pregunta SO para obtener más información sobre este tema: Access x86 COM from x64 .NET.
Según tengo entendido, no tiene forma de utilizar una DLL de 32 bits desde una aplicación de 64 bits. Dicho esto, puede compilar su aplicación solo para X86.
La solución que encontró puede ser sobre cómo usar una DLL que existe para las versiones de 32 y 64 bits en un proyecto "Any CPU", dependiendo de si la aplicación se está ejecutando en 32 o 64. entorno de bits.
Para hacer eso, podría escribir dos DLL contenedoras en C#, una para 64 bits y otra para 32 bits y usar el contenedor respectivo dependiendo de si está ejecutando un sistema operativo de 64 bits o 32 bits .
Sin embargo, esto no funciona cuando todo lo que tiene es una DLL de 32 bits. Una aplicación de 64 bits no puede usar archivos DLL de 32 bits, y una aplicación de 32 bits no puede usar archivos DLL de 64 bits.
Entonces, o necesita compilar su aplicación de 32 bits, o tiene que crear una versión de 64 bits de su DLL.
En este momento, tengo solo en DLL (32 bits uno) y no hay posibilidad de tener otra DLL - versión de 64 bits, mientras tanto mi aplicación .NET debe compilarse como CUALQUIER CPU (que también considera 64 bits). Entonces, ¿no hay alguna solución para este caso? – scatterbraiin
Bueno, como sugirieron Lasse V. Karlsen, puede escribir una aplicación separada de 32 bits (¡NO LA BIBLIOTECA!) Que comienza como un proceso separado y "habla" mediante la comunicación entre procesos. –
Una solución, aunque un poco complicada, podría ser escribir una aplicación separada de 32 bits con la que pueda hablar desde su aplicación de 64 bits, como una aplicación de consola desde la que envíe comandos a/from.
No es bonito, pero puede funcionar si solo necesita una llamada ocasional.
Intenté, no exactamente así, escribí Class library, donde importé esa DLL de Delphi, compilé x86 y luego hice referencia a mi aplicación principal de 64 bits, pero todavía no tuve suerte. – scatterbraiin
Porque es el mismo problema, solo que con más complejidad. ¡Tu aplicación de 64 bits tampoco puede usar una biblioteca de clases de 32 bits! Mikael hablaba de una aplicación de 32 bits con la que se comunica a través de Named Pipes u otros métodos de IPC. –
Leí que es posible a través de IPC, pero a decir verdad no estaba del todo claro para mí ... ¿Hay alguna posibilidad de que tenga algunas instrucciones al respecto? Necesito más detalles, porque es realmente nuevo para mí – scatterbraiin
Lo que tienes que hacer es escribir una aplicación contenedora que aloja el archivo DLL de 32 bits, en un proceso de 32 bits.
Su aplicación de 64 bits tiene que hablar con este proceso de 32 bits, a través de la red o al hacer que las funciones DLL estén disponibles a través de un objeto COM o similar.
no se puede ejecutar una DLL de 32 bits dentro de un proceso de 64 bits, no importa cuánto lo intente, por lo que debe ejecutarlo en un proceso de 32 bits.
Si compilar su aplicación de 32 bits no es una opción, no tiene más remedio que crear una aplicación de host.
¿Puede darme cualquier fuente? ¿Cómo puedo hacer eso? ¿O sabe dónde puede haber explicaciones detalladas? Muchas gracias – scatterbraiin
Estoy bastante seguro de que una aplicación de 64 bits tampoco puede usar componentes COM de 32 bits, ¿o estoy equivocado aquí? Tuve este problema antes de usar un control COM de 32 bits y obtuve errores hasta que compilé mi proyecto C# como X86. –
Desafortunadamente, esta no es una opción para mí :( – scatterbraiin
Simplemente compile su aplicación .Net como Platform x86. Se ejecutará en máquinas x64 y utilizará su DLL de 32 bits. No pierdas el tiempo en un contenedor.
No es una opción si el sistema operativo subyacente es de 64 bits, ya que tragará las excepciones que pasan a través de la capa del sistema operativo y no las verá. – XMight
¿Qué configuración mágica del sistema operativo ha soñado donde puede ejecutar una aplicación .Net de 32 bits en el sistema operativo de 64 bits, pero las excepciones son "ingeridas" ... – user7116
Esto no es un sueño, pero mis condiciones de desarrollo durante varios meses. Tengo una máquina de desarrollo de 64 bits, y si compila para la plataforma x86, las excepciones se tragan (de las tareas paralelas y no solo). Visual Studio solo muestra en la ventana de salida "primera oportunidad de excepción" que obviamente no verá en la aplicación del cliente ejecutándose. Motivo: http://blog.paulbetts.org/index.php/2010/07/20/the-case-of-the-disappearing-onload-exception-user-mode-callback-exceptions-in-x64/ – XMight
- 1. Convertir 32 bit dll a 64 bit dll
- 2. dll de 32 bits en Office 64 bit
- 3. Cargar biblioteca de 32 bits DLL en la aplicación de 64 bits
- 4. Tamaño de dll de 64 bits 50% más grande que 32-bit
- 5. No se puede cargar .dll AMD de 64 bits en un IA plataforma de 32 bits
- 6. .net console app 32 vs 64 bit
- 7. Registrar DLL COM de 32 bits en Windows 7 de 64 bits
- 8. Tamaños de estructuras en 32 bit y 64 bit
- 9. wrap 32 bit dll para sistema operativo de 64 bits para trabajar con regsvr32.exe
- 10. ¿Es posible acceder a un dll de 64 bits desde una aplicación de 32 bits?
- 11. ¿Aplicación de 32 bits o de 64 bits en el sistema operativo de 64 bits?
- 12. Java Native Interface dll de 32 bits en el sistema de 64 bits
- 13. ¿Puedo ejecutar un ensamblado C# (dll) como 32 bits desde una aplicación de 64 bits?
- 14. Utilizando una DLL de 32 bits en un proceso de 64 bits a través de COM
- 15. Identificación de la máquina de destino (32 bit o 64 bit) con implementación ClickOnce
- 16. conversión de aplicación .NET 32 bits a 64 bits
- 17. qt aplicación 64 bit windows
- 18. .net Utilidad InstallUtil - 32 bit vs 64 bit
- 19. Mezcla de 32 bits y 64 bits P/Invoca
- 20. 64 bits por división de 32 bits
- 21. nunit depura en 64 bits, la aplicación está en 32-bit
- 22. Ejecutando código de ensamblado de 32 bits en un procesador Linux y 64 bit de 64 bit: explique la anomalía
- 23. Compilación de la aplicación matlab de 32 bits en la máquina de 64 bits (C++)
- 24. Interoperabilidad de 32 y 64 bits en Windows de 64 bits
- 25. ¿Puedo cargar una DLL de 32 bits en un proceso de 64 bits en Windows?
- 26. MASM Fixing 64 bit Truncation en una DLL
- 27. Formas de acceder a una DLL de 32 bits desde un exe de 64 bits
- 28. Compilación de 32 bits con llvm-gcc de 64 bits
- 29. Llamar a LoadLibrary en un dll de 64 bits desde un proceso de 32 bits
- 30. ¿Cómo hago referencia a una DLL de 32 bits en un proyecto de 64 bits?
¿Por qué no compilar la aplicación .NET como x86? – OregonGhost
¿Por qué tiene que compilarse como CUALQUIER CPU? Una aplicación de 32 bits se ejecutará en un sistema operativo de 64 bits. – juharr
@OregonGhost Porque es el siglo XXI. – sproketboy