2010-10-18 39 views
3

Je ne peux pas comprendre cela. Je veux utiliser un OCX de ce fournisseur http://www.mobyt.it/ pour envoyer des SMS. Il est une dll et ils fournissent des exemples d'utilisation dans Vb, .NET, Visual C, etc..NET COMException Interface non enregistrée

L'exception que je reçois est:

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

Je me casse l'esprit. Il semble que l'objet COM n'est pas enregistré, mais comment dois-je l'enregistrer? J'ai essayé avec regsvr32 avec la chance.

+1

Avez-vous reçu une erreur en utilisant regsvr32? –

+0

non, il est dit que le composant a été enregistré avec succès. – vulkanino

+0

{"Échec de la récupération de la fabrique de classe COM pour le composant avec CLSID {3A869226-B8CA-11D5-9ACF-004005495FCD} en raison de l'erreur suivante: 80040154 Interfaccia non registrata. (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))"} – vulkanino

Répondre

7

En supposant qu'il soit correctement enregistré, un mode de défaillance standard est exécuté sur une version 64 bits de Windows. Les serveurs COM de ce type sont presque toujours utilisables uniquement à partir du code 32 bits. Cliquez avec le bouton droit sur votre projet EXE> Propriétés> onglet Générer> Platform target = x86. Cochez la case "Préférer 32 bits" si disponible et activé. Répétez pour la configuration Release.

L'approche suivante consiste à utiliser Regedit.exe et à vérifier qu'il a été réellement enregistré. Accédez à HKLM\Software\Wow6432Node\Classes\CLSID\{guid} où {guid} est le GUID que vous avez obtenu à partir du message d'erreur. Sur un système d'exploitation 32 bits, vous le trouverez dans HKLM \ Software \ etc.

L'approche suivante consiste à utiliser l'utilitaire ProcMon de SysInterals pour observer votre programme effectuant une recherche dans le registre et essayant de charger la DLL.

L'approche suivante consiste à appeler le fournisseur pour obtenir de l'aide.

Et puis vous renoncez à essayer de le faire fonctionner.

+0

:) il est enregistré correctement. J'ai enregistré l'ocx qui se trouve dans le répertoire d'installation, pas celui sous C: \ Windows \ SysWOW64 \, est-ce correct? Regedit trouvé qu'il est enregistré, sous HKLOCALM \ SOFTWARE \ Classes \ Wow6432Node \ CLSID \ {3A869226-B8CA-11D5-9ACF-004005495FCD} – vulkanino

+0

vous avez raison, j'utilise une machine 64 bits, mais je compile pour x86. – vulkanino

+1

c'était tout! J'ai dû définir, dans les options de compilation avancées, cible CPU x86 au lieu de tout, puis * nettoyer et reconstruire la solution *, et maintenant cela fonctionne, vous basculez. – vulkanino