Как проверить, зарегистрирован ли файл tlb в реестре с использованием C ++? - PullRequest
2 голосов
/ 18 июля 2009

Я создал библиотеку классов, используя c #. И я зарегистрировал библиотеку классов, используя

Regasm ..

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

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

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

Ответы [ 4 ]

4 голосов
/ 23 июля 2009

Используйте 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.
}
3 голосов
/ 18 июля 2009

Проверьте реестр в HKEY_CLASSES_ROOT:

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

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

2 голосов
/ 21 июля 2009

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

1 голос
/ 18 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...