Получение CLSID для DLL файла?
Я хочу создать небольшое приложение для добавления и удаления пользовательских записей контекстного меню из реестра. Чтобы это сделать, мне нужно получить CLSID произвольной DLL, чтобы я мог создавать резервные копии предыдущих записей, если они существуют до написания новых.
Хотя regsrv32
каким-то образом удается создать это магическое число, я не нашел способа получить этот номер самостоятельно.
Я надеюсь, что есть что-то лучше этого:
- реестра сканирования для имени DLL
- если не найден, зарегистрируйте его, снова сканируйте, а затем отмените регистрацию еще раз
Если DLL была переименована, я вижу возможность возникновения проблем.
Ответы
Ответ 1
Вы можете рассмотреть возможность вызова LoadTypeLibEx в DLL с указанием REGKIND_NONE, а затем изучить TypeLibInfo, доступный через Интерфейс ITypeLib, переданный вам.
Там есть информация об этом на MSDN. Это старая ссылка, ориентированная на VB6, но имеющая полезную информацию об инспекции COM-компонентов таким образом.
Ответ 2
Вы можете попытаться использовать RegOverridePredefKey(), чтобы перехватить то, что regsvr32 делает в реестре, - вызвать RegOverridePredefKey(), а затем воспроизвести, что делает regsvr32 - LoadLibrary() COM-сервер, вызовите DllRegisterServer() - затем проверьте сделанные изменения. С помощью RegOverridePredefKey() вы будете изолировать изменения и не позволять им становиться постоянными.