Здравствуйте, Ellin, Вы писали:

E>Кто что думает по поводу прав ли я? По моему dll в подавляющем большенстве случаев хуже COM. И нужно стараться всегда использовать COM. А?


Все зависит от того, что вы понимаете под COM и как вы собираетесь его использовать. Я для себя разделяю на две части: идеология COM и Windows COM Runtime.

1) Идеология COM: программа разбита на объекты, поддерживающие один или несколько хорошо определенных интерфейсов, существуют правила для управления временем жизни объектов, для передачи входных и выходных параметров и т.д.

По моему мнению, идеология COM несомненно выигрывает по сравнению с DLL:
* во-первых, натурально поддерживается объектный подход;
* во-вторых, наличие четко описанных правил передачи параметров и управления временем жизни объектов сильно упрощает командную разработку и повторное использования кода, поскольку все участники хорошо знакомы с этими правилами.

Я уже долгое время строю свои приложения по такому принципу и еще ни разу не пожалел об этом.

2) Windows COM Runtime: регистрация объектов и интерфейсов, CoCreateInstance и прочие Co-функции, межпроцессное и межпоточное взаимодействие.

С регистрацией есть проблема — объекты регистрируются в системе глобально. Это значит, что если вы оформили вашу библиотеку как COM объект, зарегистрированный в системе, все приложения будут пользоваться одной и той же копией. Это затрудняет распространение приложений, поскольку приложения должны заботиться, чтобы не заменить уже существующую версию библиотеки более старой.

Если вы не собираетесь интегрироваться со сторонними продуктами или открывать свои интерфейсы для сторонних разработчиков, и все объекты находятся в одном процессе, регистрация объектов в реестре и COM runtime вам скорее всего ни к чему.

Если вы встраиваетесь в другое приложение, которое создает объекты посредством CoCreateInstance, — у вас нет выбора, надо регистрироваться.

Другое оправданное использование COM runtime — это построение интерфейса между процессами. Например, если у вас есть windows service и клиентское приложение, которое должно с ним взаимодействовать, то COM — пожалуй, один из лучших способов организовать такое взаимодействие.

Таким образом, вам нужно постараться понять, чего вы хотите достичь и каким образом COM поможет вам в этом. Использование идеологии COM почти наверняка не навредит, а вот зависимость на регистрацию объектов может доставить хлопот.
Автор: Alex Fedotov    Оценить