DLL имеет много применений в Windows. Многие типы библиотечного кода хранятся в DLL. Например, один из них - это сборки .net, это другой зверь.
COM DLL не лучше, чем «простая двоичная PE PE», потому что COM DLL также является простой DLL . То, что делает DLL COM-библиотекой, предоставляет, возможно, в дополнение к другим вещам, определенные экспорты, которые соответствуют определенному контракту (подписи) [запись поиска IUnknown], или даже несколько типов канонизированных интерфейсов [запись поиска «двойной интерфейс»], которые не позволяют только создание экземпляров определенных объектов внутри DLL, а также автоматическое обнаружение служб, включая имена функций и типы параметров.
Благодаря двойным интерфейсам очень удобно ссылаться на языки сценариев (используемые в Интернете, сценарии оболочки, образовательные программы и т. Д.), Поскольку программисты сценариев не заботятся о строгой типизации. Двойной интерфейс, предоставляемый COM DLL, позволяет среде выполнения сценариев точно запрашивать, какие типы он ожидает, и выполнять соответствующие приведения, незаметно для пользователя.
Такая гибкость позволила построить целую гигантскую инфраструктуру COM, включая регистрацию компонентов, DCOM (вызов по сети) и т. Д. Это сделало довольно удобным предоставление интерфейсов COM в компоненты Windows (например, WMI) и офисные компоненты. , Многие другие популярные интерфейсы были реализованы над COM, такие как ADO.
Все это хорошо, но COM не "превалирует" ни в каком смысле. COM DLL являются меньшинством DLL. Простые библиотеки DLL и библиотеки .NET очень популярны. Microsoft считает, что интерфейсы .net превосходят COM. Многие фанаты Unix и другие считают, что DLL - это вообще плохая идея, так как она не предоставляет сервисы компоновки во время выполнения в том же смысле, в каком всегда были общие объекты Unix. Несмотря на то, что я являюсь разработчиком Windows, я также думаю, что SO предоставляют превосходную альтернативу, и я надеюсь, что они появятся однажды.