2009-07-18 5 views
2

J'ai créé une bibliothèque de classes en utilisant C# .and que j'ai enregistré la bibliothèque de classes en utilisantComment vérifier si le fichier tlb est enregistré dans le registre en utilisant C++?

regasm ..

RegAsm.exe Discovery.dll /tlb: Discovery.dll /codebase 

Maintenant, je veux savoir si l'ensemble est enregistré ou non en utilisant C++. J'ai besoin parce que je dois vérifier le registre pour cette DLL si elle n'est pas enregistrée Je dois l'enregistrer par programme si elle est enregistrée alors je l'ignore tout simplement.

Comment puis-je savoir si l'ensemble enregistré ou non en utilisant C++ ...

Répondre

2

Pourquoi avez-vous besoin de vous embêter? Il n'y a aucun mal à l'enregistrer à nouveau s'il est déjà là. Utilisez LoadRegTypeLib pour le charger et vérifiez la valeur de retour pour rechercher les erreurs.

1

Habituellement, le UUID de la bibliothèque se trouvent dans le Registre sous HKEY_CLASSES_ROOT \ CLSID {guid}. En vérifiant cette clé, vous savez si la DLL a été enregistrée. Le RegGetKeyValue peut faire l'affaire.

3

Vérifiez le Registre sous HKEY_CLASSES_ROOT:

  • HKEY_CLASSES_ROOT \ CLSID contient tous les ID de classe
  • HKEY_CLASSES_ROOT \ Interface contient tous les ID d'interface
  • HKEY_CLASSES_ROOT \ TypeLib contient tous les ID de bibliothèque de type

Utilisez la fonction RegOpenKeyEx pour ouvrir la clé. Si la clé existe, la fonction renvoie le succès.

+0

Comment le trouver en utilisant C++ any Idea ??? – Cute

+0

Vous avez déjà reçu cette information. Utilisez RegOpenKeyEx() pour ouvrir la clé "HKEY_CLASSES_ROOT \ TypeLib \ {typelib guid foes here}". –

4

Par exemple:

HRESULT hr; 
ITypeLib *libraryIntf; 

hr = LoadRegTypeLib(IID_GuidOfTypeLibrary, LibraryVersionMajor, 
    LibraryVersionMinor, 0, &libraryIntf); 
if(SUCCEEDED(hr)) 
{ 
    libraryIntf->Release(); 
    libraryIntf = NULL; 
    // Type library is registered and can be loaded. 
} 
else 
{ 
    // Type library is not registered. 
} 
Questions connexes