Vérifier enregistrement DLL

Vérifier enregistrement DLL - C++ - Programmation

Marsh Posté le 07-05-2010 à 09:12:19    

Bonjour,
 
Dans mon programme en C++ (avec Qt) j'aurais besoin de savoir si une DLL est enregistrée dans Windows ou non (enregistrée avec regsvr32).  
J'ai essayé de chercher comment faire que ce soit avec du C++ de base ou bien avec les librairies Qt mais je n'ai rien trouvé à ce sujet.
 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 07-05-2010 à 09:12:19   

Reply

Marsh Posté le 07-05-2010 à 09:35:08    

Déjà, il te faut le GUID de la dll, car toute dll COM possède un GUID (les chiffres au format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Pour rechercher ce GUID, si tu n'as pas la doc de la dll, alors tu dois faire une recherche dans la base de registres sur le chemin complet de ta dll. Le GUID y sera indiqué.
 
Une fois que tu as le GUID, appelle la fonction CoCreateInstance sur ce GUID. Si la fonction te renvoie S_OK, alors la création de l'objet COM s'est déroulée correctement, ceci signifiant donc que la dll est enregistrée.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-05-2010 à 09:38:17    

J'ai le GUID. Je vais tester CoCreateInstance alors. Merci. :)

Reply

Marsh Posté le 07-05-2010 à 10:28:07    

Je n'arrive pas bien à l'utiliser. :(
Je n'ai besoin de renseigner que le CLSID non ?

 

J'ai fait ça :

Code :
  1. LPUNKNOWN pUnkOuter;
  2.     DWORD dwClsContext;
  3.     LPVOID *ppv = NULL;
  4.     static CLSID const clsid = { 0xe97ee6eb, 0x7fbe, 0x43b1, { 0xb6, 0xd8, 0xc4, 0xd8, 0x6c, 0x78, 0xc5, 0xa0 } };    
  5.     static CLSID const riid = {};
  6.     if( CoCreateInstance(clsid,pUnkOuter,dwClsContext,riid,ppv) == S_OK )
  7. ...
 

Mais ça ne me retourne pas S_OK alors que l'ID est bonne.

Message cité 1 fois
Message édité par Deamon le 07-05-2010 à 10:28:32
Reply

Marsh Posté le 07-05-2010 à 11:08:35    

Deamon a écrit :


Code :
  1. if( CoCreateInstance(clsid,pUnkOuter,dwClsContext,riid,ppv) == S_OK )
  2. ...




Bonjour,
Je ne saurais t'indiquer le bon code, mais il est interessant d'analyser la valeur de retour de cocreateinstance, et non de juste la comparer a S_OK car la tu ne sais pas pourquoi cela ne s'est pas bien passé!
http://msdn.microsoft.com/en-us/li [...] 85%29.aspx

Reply

Marsh Posté le 07-05-2010 à 17:41:06    

Il'y a pas des histoires d'installation de la dll avec un regsvr32 parfois ?

Reply

Marsh Posté le 07-05-2010 à 19:35:39    

breizhbugs a écrit :


 mais il est interessant d'analyser la valeur de retour de cocreateinstance


J'avais un nombre du genre -24217328, je n'ai pas retenu la valeur.

 
Trap D a écrit :

Il'y a pas des histoires d'installation de la dll avec un regsvr32 parfois ?


Oui c'est une dll enregistré avec regsvr32 mais justement je voulais savoir si l'utilisateur avait bien sa dll d'enregistrée.

Message cité 1 fois
Message édité par Deamon le 07-05-2010 à 19:35:47
Reply

Marsh Posté le 08-05-2010 à 11:55:44    

Deamon a écrit :


J'avais un nombre du genre -24217328, je n'ai pas retenu la valeur.
 


Et comparée aux constantes fournies dans la doc de cocreateinstance (voir lien plus haut), ca te donne quelle raison? (REGDB_E_CLASSNOTREG, CLASS_E_NOAGGREGATION, CO_S_NOTALLINTERFACES, E_NOINTERFACE ?)
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed