Importation d’une DLL 32 bits dans une application .Net 64 bits

J’ai un problème, j’essaie de le résoudre depuis hier mais pas de chance. J’ai 32 bits Delphi dll que je veux importer dans .NET Win Application. cette application doit être construite sur TOUT mode CPU. bien sûr, il y a BadImageFormatException à venir, ce qui signifie que l’application x64 ne peut pas être chargée x86 dll .. J’ai cherché sur Google et trouvé une solution, il m’a dit que je devais faire du wrapper, mais ce n’était pas clair pour moi. Quelqu’un peut-il dire comment résoudre ce problème? Existe-t-il un moyen possible d’importer une dll Delphi 32 bits dans un programme construit en mode Tout processeur ou x64 (peut-être une autre solution).

Une idée générale pourrait être d’encapsuler votre DLL 32 bits (non gérée) avec une dll wrapper 32 bits gérée et de la rendre visible par COM. Cela autorise les appels vers votre DLL wrapper via son interface COM.

Vous pouvez utiliser un substitut COM pour que votre dll COM apparaisse comme un serveur COM hors processus. Jetez un coup d’œil à cette question SO pour plus d’informations sur ce sujet: Accédez à COM x86 à partir de x64 .NET .

Ce que vous devez faire est d’écrire une application wrapper qui héberge le fichier DLL 32 bits, dans un processus 32 bits.

Votre application 64 bits doit ensuite communiquer avec ce processus 32 bits, via le réseau ou en rendant les fonctions de DLL disponibles via un object COM ou similaire.

Vous ne pouvez pas exécuter une DLL 32 bits dans un processus 64 bits, peu importe les efforts que vous déployez, vous devez donc l’exécuter dans un processus 32 bits.

Si la compilation de votre application pour 32 bits uniquement n’est pas une option, vous n’avez pas d’autre choix que de créer une application hôte.

Si je comprends bien, vous n’avez aucun moyen d’utiliser une DLL 32 bits à partir d’une application 64 bits. Cela dit, vous ne pouvez comstackr votre application que pour X86.

La solution que vous avez trouvée concerne peut-être l’utilisation d’une DLL existante pour les versions 32 et 64 bits dans un projet compilé avec “Tout processeur”, selon que l’application s’exécute dans un environnement 32 ou 64 bits.

Pour ce faire, vous pouvez écrire deux DLL de wrapper en C #, une pour 64 bits et une pour 32 bits, et utiliser le wrapper respectif selon que vous utilisez un système d’exploitation 64 bits ou 32 bits.

Toutefois, cela ne fonctionne pas lorsque tout ce que vous avez est une DLL 32 bits. Une application 64 bits ne peut pas utiliser de DLL 32 bits, de même qu’une application 32 bits ne peut pas utiliser de DLL 64 bits.

Vous devez donc soit comstackr votre application au format 32 bits, soit créer une version 64 bits de votre DLL.

Une solution bien que le désordre pourrait être d’écrire une application 32 bits distincte avec laquelle vous pouvez parler à partir de votre application 64 bits, telle qu’une application console à laquelle vous envoyez des commandes.

Ce n’est pas beau, mais cela peut marcher si vous n’avez besoin que d’un appel occasionnel.

Comstackz simplement votre application .Net en tant que plate-forme x86. Il fonctionnera sur des ordinateurs x64 et utilisera votre DLL 32 bits. Ne perdez pas de temps sur un emballage.