IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Erreur lors d'une modification d'interface ActiveX


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut Erreur lors d'une modification d'interface ActiveX
    Bonjour,

    Je rencontre le problème suivant: je dispose d'un interface activeX, utilisé dans un projet C++ builder (le tout via l'import du tlb correspondant). L'interface été récemment mis à jour avec l'ajout de nouvelles méthodes à une des classes, et depuis il m'est impossible d'acceder à la classe modifiée. J'ai à chaque fois le message suivant :

    Classe non enregistrée, ClassID: "GUID"

    Et si je commente les modifications de l'interface, je n'ai plus d'erreurs ...

    Si quelqu'un pouvait me donner quelque information, cela m'aiderait grandement ....
    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    L'Import TLB a été fait sur le même poste que celui que tu utilises ?
    L'ActiveX installé est-il de la bonne version ?
    un Regsvr32 a bien été fait ?

    En général, on évite de modifier une interface déployée, on ajoute une autre interface qui propose les nouvelles méthodes, l'implementation de la 1ère interface fourni aussi celle de la nouvelle, l'objet IUnknown peut être caster d'une interface à une autre !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    Merci pour ta réponse rapide.

    Je vais regarder en ajoutant une nouvelle interface, cela devrait effectivement marcher.
    Pour la version de l'ActiveX installé, je suis sûr de mon coup vu qu'il s'agit d'un contrôle graphique, je vois bien si il est modifié. Et l'import du tlb est bien fait sur le même poste.

    Ce qui me surprend le plus, c'est vraiment que la moindre modification d'une interface, entraine une erreur "classe non enregistrée" ...

    Une précision supplémentaire: même quand je change le GUID de l'interface modifiée, l'erreur me renvoie l'ancien GUID ...

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    J'ai fait comme tu m'as dit et effectivement ça marche bien :

    J'ai créé dans l'activeX un interface IToto2 héritant de IToto, comme ça IToto ne bouge pas et on a les nouvelles méthodes dans IToto2.

    Par contre comment expliquer que la modification de IToto crée ensuite et systematiquement une erreur ?

    Merci

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Je n'ai pas encore fait d'interface avec C++Builder !
    En Delphi, c'est une chose courante durant le développement, on ajoute méthodes, énumérations et propriétés, cela ne pose pas de problème !
    Je n'ai fait qu'un seul Control ActiveX pour l'intégrer dans Navision
    Je n'ai pas eu ce genre de problème !
    J'avais modifié un composant d'un ami développeur Navision, il n'avait personne sous la main pour lui modifier le compo Delphi, je lui ai ajouté les méthodes qu'il avait besoin pour améliorer l'ergonomie et la maitrise sur le Control ActiveX
    Moi, pour tester, j'utilisais un petit programme Delphi, je pense n'avoir eu aucun soucis car je lui ai vite fait bien fait ça en une petite matinée ! Si j'avais eu des soucis du genre, ça m'aurait gavé !

    C'est comme si un GUID changeait entre l'ancienne et la nouvelle interface !

    Je vois un cas où cela pourrait produire une telle erreur :
    - Création du Control ActiveX
    - Design des Interfaces (A, B, C)
    - Implementation
    - Installation (RegSrv32)
    - Ajout de nouvelle Interface (D et E)
    - Ajout de fonction dans A qui prend en paramètre une interface D

    Si tu ne refais pas un RegSvr32, tu as un risque qu'il manque des GUID dans la Base de Registre de D et E
    Selon l'utilisation, cela peut-être bloquant ou pas

    Avec IToto2, tu n'as pas de problème car tu as son type, tu as GUID dans le TLB, c'est Dephi qui bosse ! Ce n'est qu'un transtypage, cela utilise la méthode QueryInterface qui fait son boulot et tu renvoie l'interface demandée, je ne pense pas qu'il soit nécessaire que celle-ci soit enregistrée dans la BDR ! A Vérifier
    C'est peut-être même ce que tu as fait à l'instant avec IToto2 !

    As-tu relancé RegSvr32 après avoir ajouter IToto2 ?

    Une précision supplémentaire: même quand je change le GUID de l'interface modifiée, l'erreur me renvoie l'ancien GUID ...
    As-tu relancé RegSvr32 après avoir changer le GUID ?
    n'hésite pas faire RegSvr32 -u pour désintaller, puis un autre RegSvr32, pour installer de nouveau

    Parcontre, si tu as besoin d'une interface D comme paramètre d'une fonction de A, le programme appelant doit faire un CreateOleObject (ou Create d'une CoClass) de D et là le GUID doit être présent dans la BDR pour savoir quoi faire (quelle DLL contient cet objet)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    Merci pour ces infos.

    Je ne fais pas de RegSvr32.
    Mon workflow précis est :

    - Création de la dll (c#) et du tlb
    - Enregistrement de la dll via Regasm dll /codebase .
    - import du tlb et création d'un client c++ builder

    La chose qui me paraît mysterieuse, c'est d'où sort le GUID du message d'erreur ? du tlb ou d'un enregistrement ?

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    C'est une DLL contenant un Assembly.net compatible COM !
    Cela change tout !

    Je ne sais pas comment fonctionne le C# !
    Tout ce que je sais c'est que l'interopérabilité Win32 vs .NET, c'est souvent pénible, j'ai du faire des ActiveX Win32 (en Delphi), il faut faire bien attention à ce que l'on fait pour rester en safecall pour que cela fonctionne correctement !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur lors d'une modification d'une variable private
    Par tonytrua dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 27/12/2011, 20h43
  2. Pb erreur 424 lors d'une modif de l'heure
    Par pouet35 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2011, 11h21
  3. [SP-2010] Message d'erreur lors de la modification d'une page
    Par Faro dans le forum SharePoint
    Réponses: 0
    Dernier message: 16/12/2010, 17h52
  4. erreur OLE DB lors d'une modification
    Par flo456 dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2007, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo