2009-09-12 10 views
3

J'ai une application WPF qui utilise Flash10c.ocx développé sur une machine 32 bits. Je n'ai pas eu à enregistrer l'ocx sur ma machine à dev, j'ai juste installé le dernier flash, ajouté une référence et commencé à coder. Lors d'un test sur un système 64 bits, je reçois l'ancienne "Classe non enregistrée" qui, je pense, signifie que j'ai besoin de regsvr l'ocx. Est-il correct de simplement copier l'ocx 32 bits (je suis assez sûr que son 32 bits comme il est situé dans C: \ Windows \ System32 \ Macromed sur le système de dev) à un système 64 bits et l'enregistrer?Flash ocx "Classe non enregistrée" sur Windows 7 x64

Mise à jour: regsvr32/i flash10c.ocx erreurs avec "Le module flash10c.ocx las chargé, mais l'appel à DllRegisterServer a échoué avec le code d'erreur 0x80004005"

Mise à jour 2: J'ai renoncé à cela et a décidé pour exécuter Flash sur les systèmes 32 bits uniquement. Si quelqu'un a une meilleure réponse, j'aimerais l'entendre, mais je réponds à la suggestion actuelle en lui donnant le mérite de l'effort.

+1

si ses fenêtres Vista/7 vous devez faire l'enregistrement en utilisant l'invite de commande élevée –

+0

qu'est-ce que l'invite de commande élevée? – clamp

Répondre

4

La raison pour laquelle cela ne fonctionne pas pour vous est que votre application WPF s'exécute en 64 bits.

Une application .NET peut s'exécuter en 32 bits ou en 64 bits; et le CLR JIT votre application à n'importe quelle architecture l'application est en cours d'exécution - dans ce cas, 64 bits. Sauf que vous voulez maintenant que votre application 64 bits charge une DLL 32 bits. Ce n'est pas possible. Un processus 64 bits ne peut charger que les DLL 64 bits. Un processus 32 bits ne peut charger que les DLL 32 bits. Aucune quantité de bidouillage avec l'enregistrement de l'objet COM ne changera cela; ce n'est pas une question d'entrées de registre manquantes. Adobe Flash est uniquement une DLL 32 bits. Adobe ne dispose pas (et n'aura jamais de chance) d'une version 64 bits.

Pour que votre application WPF .NET puisse charger la DLL flash 32 bits, elle doit être exécutée en tant que processus 32 bits. Il existe un moyen, dans la configuration de Visual Studio, de forcer votre application .NET à cibler uniquement x86, plutôt que Any CPU.

Les choix de cibles CPU sont:

  • Tout CPU
  • x86
  • x64
  • Itanium

Flash, pour ce que ça vaut, n'a pas un système Itanium version, soit. Voir pour plus d'informations sur le cpus cible.

+0

Pour ceux qui cherchent une réponse à cette question, c'est tout à fait exact. Changez la cible CPU en x86 si vous avez besoin de charger Flash. –

+0

Salut, Aujourd'hui, je suis impliqué dans un projet qui nécessite de pouvoir travailler dans Windows 7 et plus. cette application fonctionne sous Windows XP. quand je construis et débogue cette application j'obtiens une exception "Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) pendant l'exécution de la ligne AxShockwaveFlash.EndInit(); J'ai installé le dernier joueur de shockwave dans ma machin de développement. mgr: paramétré sur Any CPU, Dois-je relancer toutes les références avec new dll? ou comment enregistrer la classe? Aidez-moi à résoudre ce problème .. – Vijayaraghavan

+0

@Pranesh Le problème est que votre configuration IDE mgr est définie sur Any CPU –

3

Peut être l'installateur flash est destiné à être seulement pour OS 32 bits. Par conséquent, il ne s'est pas installé correctement sur une machine 64 bits. L'erreur signifie que vous devrez enregistrer manuellement l'ocx, mais l'enregistrera avec succès c'est une question totalement différente.

Edit 1: voici Adobe's statement of support for 64-bit systems (il n'y a pas) (je suppose que vous utilisez 64 bits navigateur sur une machine 64 bits)

Edit 2: Un autre forum message about Flash on 64-bit Window s.

+1

Merci Ganesh - J'utilise actuellement le contrôle ocx en dehors d'un environnement de navigateur, mais je me rends compte de vos messages que je vais devoir compiler l'application 32 bits. J'ai également essayé d'utiliser une invite de commande élevée, mais j'ai rencontré le même message d'erreur que celui décrit ci-dessus. –

Questions connexes