2008-09-15 7 views
8

Nous avons une application WinForms écrite en C# qui utilise le composant AxAcroPDFLib.AxAcroPDF pour charger et imprimer un fichier PDF. A travaillé sans aucun problème dans Windows XP. J'ai déplacé mon environnement de développement à Vista 64 bits et maintenant l'application ne fonctionnera pas (sur Vista 64) à moins que je supprime le composant AxAcroPDF. J'obtiens l'erreur suivante lorsque l'application s'exécute:AxAcroPDF - Classe Vista64 non enregistrée Erreur

"System.Runtime.InteropServices.COMException: Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))."

J'ai été informé sur les forums Adobe que la raison de l'erreur est qu'ils ne possèdent pas de version 64 bits du contrôle AxAcroPDF ActiveX.

Y at-il un moyen de contourner ce problème? Par exemple, puis-je convertir moi-même le contrôle ActiveX 32 bits en contrôle 64 bits?

Répondre

14

Vous ne pouvez pas convertir le contrôle ActiveX d'Adobe en 64 bits vous-même, mais vous pouvez forcer votre application à fonctionner en mode 32 bits en définissant la cible de la plateforme sur x86.

Pour obtenir des instructions pour votre version de Visual Studio, voir la section 1.44 du Issues When Using Microsoft Visual Studio 2005

+0

réponse par seaman.myopenid.com ci-dessous est le même mais fournit un peu plus de détails – daveywc

0

Utiliser l'isolement DLL, fonctionne avec tous les 32bit application COM +. Voir plus à: http://support.microsoft.com/kb/281335

Avec cette solution, vous pouvez isoler votre application COM + 32 bits dans un processus 32 bits distinct.

applications 64bit recherche installés objets COM + à: HKLM \ Software \ Classes, mais les applications 32 bits utilisent HKLM \ Software \ WOW6432 \ Classes

+0

Est-ce que l'isolation DLL fonctionne avec les contrôles ActiveX? J'avais l'impression que vous ne pouviez créer que des composants non visuels isolés. Si vous le pouvez, cela peut être une meilleure solution en fonction du nombre et de la nature des appels au contrôle par rapport au déploiement Hstle/ralentissement 32 bits – rpetrich

6

Le framework .Net 1.1 vise toujours les processeurs 32 bits en framework .Net 2.0 et ci-dessus peut cibler 32 bits ou 64 bits en fonction de la propriété processorArchitecture du manifeste de programme modifiée par l'option 'Platform Target' de l'IDE de Visual Studio. Avec l'option par défaut 'Any CPU', le code IL est compilé en fonction de la plateforme mais bien sûr l'appel COM au composant AxAcroPDF 32 bits échoue si la plate-forme est à 64 bits. Reconstruisez simplement l'EXE pour cibler la plate-forme 32 bits seulement. Cela fonctionne très bien avec l'émulateur WOW64 dans Vista 64 bits.

Questions connexes