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

MFC Discussion :

Créer une instance d'un objet COM


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut Créer une instance d'un objet COM
    Bonjour,

    J'avais un besoin d'une petite boite de dialog avec une progress bar.

    En chargeant sur CodeProject, j'ai trouvé le truc parfait : Using the IE 5 built-in progress dialog
    Complètement intégrer avec Windows, apparemment qui fonctionne avec tous les OS. Et en plus c'est assez joli, ça bouge tout seul.

    Bref, je l'ai intégré à mon soft sous VC9 et Vista et tout fonctionne correctement.

    Cependant je suis passé en phase de tests juste avant la livraison et là c'est le drame.
    Toutes les machines sous XP, pose problème. Je suis remonté au problème et ça vient de là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hr = CoCreateInstance ( CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER,
                                IID_IProgressDialog, (void**) &m_pIDlg );
    Le "hr" ne retourne pas une valeur correcte. Et c'est la merde.
    Vu que je ne comprennais pas le problème je me suis mis à chercher le code d'erreur mais je ne le trouve pas. J'ai cherché mais là encore c'est pas bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    if ( hr == REGDB_E_CLASSNOTREG )
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error REGDB_E_CLASSNOTREG") );
    		}
    		else if ( hr == CLASS_E_NOAGGREGATION )
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error CLASS_E_NOAGGREGATION") );
    		}
    		else if ( hr == E_NOINTERFACE  )
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error E_NOINTERFACE ") );
    		}
    		else if ( hr == E_UNEXPECTED  )
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error E_NOINTERFACE ") );
    		}
    		else if ( hr == E_OUTOFMEMORY  )
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error E_NOINTERFACE ") );
    		}
    		else if ( hr == E_INVALIDARG  )
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error E_NOINTERFACE ") );
    		}
    		else
    		{
    			AfxMessageBox ( _T("CSHProgressWnd - CoCreateInstance : Error ???") );
    		}
    Je tombe à chaque fois sur le message "CSHProgressWnd - CoCreateInstance : Error ???".

    Là j'ai besoin d'aide.
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    As-tu pensé au CoInitialize() ?

    PS: Plusieurs de tes messages d'erreur sont foireux... Et à ta place, j'utiliserais un switch plutôt que cette suite de if...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 446
    Par défaut
    Moi j'utiliserais le debugger avec un point d'arrêt et j'afficherais le "hr" dans un "espion" du debugger.
    "hr" est un entier 32 bit non-signé, en nous donnant sa valeur en base 10 ou 16 on peut vous donner à quel erreur il correspond en 1/4 de seconde. Je le répète "hr" n'est qu'un simple entier.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Traditionnellement, c'est en base 16 qu'il faut les afficher.
    Car c'est aussi en base 16 qu'ils sont définis dans les headers, permettant une recherche...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 446
    Par défaut
    Moi, je suis faignant, j'utilise Google plutôt qu'une recherche dans tous les header de l'univers.

  6. #6
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut RegSvr32
    Bonjour;

    T'a vérifié que ta DLL COM est bien enregistré, ça peut poser un probleme.
    C'est le composant n'est pas enregistré tu devrais l'enregistrer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cmd 
    cd chemin/vers/repertoireDll
    RegSvr32 NomDll.Dll

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/01/2012, 17h59
  2. créer une instance d'un objet
    Par hugodu13 dans le forum VBScript
    Réponses: 1
    Dernier message: 21/03/2011, 11h19
  3. [PHP 5.0] Créer une instance d'objet dynamique
    Par _jey_ dans le forum Langage
    Réponses: 1
    Dernier message: 07/06/2010, 17h45
  4. Réponses: 3
    Dernier message: 30/05/2008, 11h31
  5. [POO] Créer une instance d'un objet par la valeur d'une variable
    Par philworks dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/11/2007, 14h27

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