Почему бы не встроить typelib в COM-сервер и отправить его отдельно? - PullRequest
0 голосов
/ 25 февраля 2011

Я анализирую довольно старый проект COM-сервера, чтобы повторно использовать некоторые вещи из него, и заметил странную вещь - чтобы выставить себя в реестр, он реализует отдельную функцию, отличную от DllRegisterServer(), и эта функция принимаетпуть к typelib и загружает typelib из этого пути, а typelib поставляется отдельно и может быть расположен где угодно.

Типичное решение состоит в том, чтобы просто использовать ATL CComModule::RegisterServer(), который с удовольствием загрузит typelib из той же DLLесли он встроен в качестве ресурса.DLL уже использует ATL, и это должно быть самым прямым способом.

Я попытался выяснить, почему библиотека типов не встроена в качестве ресурса, а выглядит так, как будто это было очень старое проектное решение, и никто не может объяснить это.

Я вижу причину для доставки typelib отдельно - таким образом, разработчикам COM-серверов проще #import.Но почему бы не отправить его как отдельный файл и внедрить как ресурс в DLL-библиотеку COM-сервера?Я мог бы предположить, что typelib увеличивает размер DLL на несколько сотен килобайт, но не может найти какой-либо другой серьезной причины.

Какие могут быть причины для доставки typelib только в виде отдельного файла?

1 Ответ

0 голосов
/ 01 марта 2011

Наконец-то я нашел серьезную причину для доставки библиотеки типов отдельно. Если поставляются две версии - автономная и встроенная - установщик может что-то испортить, и эти две библиотеки типов могут выйти из синхронизации, и это вызовет у клиентов самые разные странные проблемы. Отгрузка ровно одной версии typelib в этом аспекте безопаснее.

...