Получение CLSID для файла DLL?

Я хочу создать небольшое приложение, чтобы добавить и удалить записи меню пользовательского контекста из реестра. Для создания этого так или иначе я должен получить CLSID произвольного DLL, таким образом, я могу создать резервную копию предыдущих записей, если они существуют прежде, чем записать новые.

Хотя regsrv32 так или иначе умеет создать это волшебное число, я не нашел способа получить то число сам.

Я надеюсь, что существует что-то лучше, чем это:

  1. сканирование реестра для имени DLL
  2. если не найденный, зарегистрируйте его, просканируйте снова и затем не зарегистрируйте его снова

Если DLL был переименован, я вижу возможность для проблем.

11
задан Jeroen 6 March 2013 в 07:55
поделиться

2 ответа

Вы можете рассмотреть возможность вызова LoadTypeLibEx для библиотеки DLL с указанием REGKIND_NONE, а затем проверить, получить информацию TypeLibInfo , доступную через ITypeLib интерфейс передан вам обратно.

Информация об этом есть на MSDN . Это старая ссылка, ориентированная на VB6, но она содержит полезную информацию о проверке COM-компонентов таким способом.

4
ответ дан 3 December 2019 в 11:20
поделиться

Вы можете попробовать использовать RegOverridePredefKey () , чтобы перехватить то, что regsvr32 делает с реестром - вызовите RegOverridePredefKey (), затем воспроизведите то, что делает regsvr32 - LoadLibrary () COM-сервер, вызовите DllRegisterServer () - затем проверить сделанные изменения. С помощью RegOverridePredefKey () вы изолируете изменения и не позволите им стать постоянными.

2
ответ дан 3 December 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: