2009-07-18 1 views
2

Я создал библиотеку классов с помощью C# й я зарегистрировал библиотеку классов, используяКак проверить, зарегистрирован ли файл tlb в реестре с помощью C++?

Regasm ..

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

Теперь я хочу знать, зарегистрирован ли узел или не использовать C++. Мне нужно, потому что я должен проверить реестр для этой DLL, если он не зарегистрирован. Я должен зарегистрировать его программно, если он зарегистрирован, а затем просто пропустите его.

так Как я могу знать, зарегистрирован ли узел или не использовать C++ ...

ответ

2

Зачем вам вообще нужно беспокоиться? Нет никакого вреда, чтобы зарегистрировать его снова, если он уже существует.

1

Обычно библиотека UUID можно найти в реестре под HKEY_CLASSES_ROOT \ CLSID {GUID}. Проверяя этот ключ, вы знаете, была ли зарегистрирована dll. RegGetKeyValue может сделать трюк.

3

Проверка реестра в разделе HKEY_CLASSES_ROOT:

  • HKEY_CLASSES_ROOT \ CLSID содержит все идентификаторы класса
  • HKEY_CLASSES_ROOT \ Interface содержит все идентификаторы интерфейсов
  • HKEY_CLASSES_ROOT \ TypeLib содержит все идентификаторы библиотек типа

Используйте функцию RegOpenKeyEx, чтобы открыть ключ. Если ключ существует, функция возвращает успех.

+0

Как программно найти его с помощью C++ любой идеи ??? – Cute

+0

Вы уже получили эту информацию. Используйте RegOpenKeyEx(), чтобы открыть ключ «HKEY_CLASSES_ROOT \ TypeLib \ {typelib guid foes here}». –

4

Используйте LoadRegTypeLib для его загрузки и проверьте возвращаемое значение для ошибок. Например:

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. 
}