Я анализирую довольно старый проект COM-сервера, чтобы повторно использовать некоторые вещи из него, и заметил странную вещь - чтобы выставить себя в реестр, он реализует отдельную функцию, отличную от DllRegisterServer()
, и эта функция принимаетпуть к typelib и загружает typelib из этого пути, а typelib поставляется отдельно и может быть расположен где угодно.
Типичное решение состоит в том, чтобы просто использовать ATL CComModule::RegisterServer()
, который с удовольствием загрузит typelib из той же DLLесли он встроен в качестве ресурса.DLL уже использует ATL, и это должно быть самым прямым способом.
Я попытался выяснить, почему библиотека типов не встроена в качестве ресурса, а выглядит так, как будто это было очень старое проектное решение, и никто не может объяснить это.
Я вижу причину для доставки typelib отдельно - таким образом, разработчикам COM-серверов проще #import
.Но почему бы не отправить его как отдельный файл и внедрить как ресурс в DLL-библиотеку COM-сервера?Я мог бы предположить, что typelib увеличивает размер DLL на несколько сотен килобайт, но не может найти какой-либо другой серьезной причины.
Какие могут быть причины для доставки typelib только в виде отдельного файла?