COM, COM +, DCOM, с чего начать? - PullRequest
31 голосов
/ 23 мая 2009

Мне интересно узнать о COM +, DCOM. Я знаю, что MSFT не поощряет вас использовать эти инструменты изначально (имеется в виду C / C ++, на самом деле не так много документации), но я хочу научиться использовать эти технологии, такие как встраивание Internet Explorer в программу на C

Я подумал, что, возможно, мне удастся найти людей, которые работают с тем или другим, кто знает об этой технологии.

С чего начать? Есть идеи? Любой пример (например, Hello World DCOM)?

Ответы [ 7 ]

37 голосов
/ 24 мая 2009

Если вы серьезно относитесь к изучению COM, «Essential COM» Дона Бокса, безусловно, абсолютно необходимо прочитать. СОМ может сбивать с толку, и, по моему скромному мнению, Дон Бокс - один из немногих, кто на самом деле «понял».

Пример кода в "Essential COM" написан на C ++. Вы не найдете много книг, которые поддерживают COM на C. Вы можете написать COM на C, но это будет очень, очень болезненно. COM оптимизирован для разработки на C ++.

Эта книга не идеальна и не "завершена". Есть некоторые (предоставленные, немного эзотерические) области, которые книга просматривает. Например, в книге написано около 1 1/2 страницы о «прозвищах» (я никогда не видел обращения с прозвищами, которое меня удовлетворяло бы). Я считаю эту книгу фундаментальной.

Во-вторых, в реальной жизни вы, скорее всего, захотите использовать вспомогательную библиотеку, такую ​​как ATL, вместо того, чтобы писать весь клей COM напрямую. Существует слишком много способов сделать небольшие ошибки в COM даже в базовой настройке. ATL даст вам хорошие шаблоны и реализует для вас скучный код. В обучении вам лучше использовать простой C ++.

Есть много книг об ATL, и некоторые из них довольно хороши. Я понимаю, что ATL сильно изменился со времен VC ++ 6, но у меня там нет непосредственных знаний: к сожалению, большая часть кода COM, с которым я работаю, навсегда привязана к C ++ в VC6 .

Убедитесь, что написанная вами книга написана для той версии Visual Studio и / или ATL, которую вы планируете использовать.

Некоторые сведения о книгах COM:

Обратите внимание, что есть много книг, которые неправильно понимают COM или фокусируются на неправильных вещах. Старые книги хуже в этом отношении. Некоторые из первых нескольких книг рассматривали COM как нечто большее, чем сантехнические детали, необходимые для работы OLE («Связывание и внедрение объектов», вот что позволяет перетаскивать диапазон электронных таблиц в документ Word). Из-за этого многие материалы очень запутаны. Прошло некоторое время, прежде чем люди поняли, что OLE не так важен, и что COM на самом деле был.

К тому времени, когда Дон Бокс опубликовал "Essential COM", трещины на фундаменте COM начали становиться очевидными. В COM нет ничего ужасного, но потребности сообщества разработчиков развились и переросли возможности COM без серьезной модернизации.

.NET был рожден в результате этих усилий по устранению ограничений в COM, особенно в области «информации о типах». Спустя всего несколько лет после публикации «Effective COM» внимание сообщества переключилось на .NET. Из-за этого хорошие учебные материалы по COM сейчас и, вероятно, навсегда останутся ограниченными.

Итак, COM не сломан, и он отлично работает для вещей, для которых он используется (вот почему Explorer все еще использует его). Это просто не лучшее решение для многих проблем, которые необходимо решить сегодня.

В итоге:

Я рекомендую "Essential COM" для основ. Затем, любая из многих хороших доступных книг ATL (там нет сильных предпочтений), а затем используйте другие ресурсы, такие как MSDN или - конечно, переполнение стека, чтобы охватить области, которые представляют для вас особый интерес.

Если вы предпочитаете не полагаться на ресурсы разновидности мертвого дерева, продолжайте изучать ATL из Интернета. Но некоторые книги стоит читать по старинке - и «Essential COM» - одна из них.

Удачи.

11 голосов
/ 23 мая 2009

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

Лучший способ начать писать некоторые COM - это использовать ATL . В .NET COM + называется Enterprise Services .

Лучшая книга о COM, которую я знаю, это книга Essential COM Дона Бокса и книга COM + Тима Эвальда .

6 голосов
/ 24 июля 2013

Я составил список книг, которые следует читать в следующем порядке:

  1. «Inside COM» от Дейла Роджерсона. Это должна быть ваша первая книга. Он объясняет основы подсчета ссылок, интерфейсов, IUnknown, компонентов, idl, IDispatch, типов автоматизации и квартир. Из этой книги вы заметите, что для создания компонентов требуется довольно много кода и что вы можете легко пропустить «Релиз», что приводит к утечке ресурсов. Также в этой книге не хватает некоторых деталей.
  2. «ATL Internals» из Тавареса. ATL помогает вам использовать оба клиента в качестве компонентов COM. С помощью умных указателей (например, CComPtr) трудно ошибиться в подсчете ссылок в наши дни. ATL также облегчает создание компонентов на С ++. К сожалению, ATL скрывает многие функции в макросах и имеет интуитивно понятный способ реализации IUnknown. Альтернативой может быть «Inside ATL».
  3. 'Essential COM' от Don Box. Эта книга упоминается часто, но это не хорошая книга для начинающих. Он пропускает общую картину, но хорош в деталях (например, разница между size_is и length_is в idl).
  4. «Понимание ActiveX и OLE: руководство для разработчиков и менеджеров». Эта книга затрагивает некоторые из более эзотерических интерфейсов, таких как IPersist, IStorage; IMoniker и т. Д., Но не вдаваться в подробности.

Имейте в виду, что COM является устаревшей технологией, хотя она по-прежнему жизнеспособна, особенно для собственных разработчиков.

3 голосов
/ 09 сентября 2009

Начните с «Inside COM», затем перейдите к «Inside DCOM» и затем прочитайте «Essential COM». Вы получите контроль над COM. Обе книги Inside COM и Inside DCOM являются публикациями Microsoft. Отличные книги для тех, кто хочет досконально знать COM / DCOM.

3 голосов
/ 23 мая 2009

COM по-прежнему полезен, если вы хотите работать или расширять различные API-интерфейсы Windows, такие как расширения оболочки, хост сценариев и т. Д.

Essential COM (Box) и ATL Internals (Rector и Sells) являются отличными источниками. Эффективный COM (Box и др.) Тоже в порядке.

Если вы действительно хотите получить полную картину в COM, попробуйте получить копию огромного Inside OLE (Brockschmidt).

Распределенный COM (Эддон, Эддон) подходит для DCOM, как и Внутри COM + Базовые сервисы (Эддон, Эддон) для COM +.

даже в некоторых якобы «чистых» книгах на C ++ есть биты о COM. Imperfet C ++ Мэтью Уилсона содержит несколько полезных частей, чтобы понять, как он работает изнутри, а его книга Extended STL содержит несколько глав о том, как адаптировать COM к коллекциям STL.

Если вы хотите узнать больше о том, как писать COM-серверы, вам, вероятно, нужно узнать ATL. Вышеупомянутый ATL Internals является обязательным. Несмотря на свое скромное звучание, в Beginning ATL COM тоже есть кое-что полезное.

Также полезным в процессе обучения может быть противопоставление COM и .NET. Руководство по взаимодействию .NET и COM - большая ласточка, но в ней есть кое-что полезное. Кроме того, я бы ознакомился с Основами CLI Shared Source, просто чтобы помочь сопоставить две технологии.

НТН

2 голосов
/ 23 мая 2009

Essential COM специально для реализации или использования COM-компонентов из C ++, без помощи IDE, инфраструктуры или библиотеки.

COM тривиально использовать, например, из VB или Delphi, которые скрывают специфический для COM клей от прикладного программиста. В C ++ вы часто используете некоторую библиотеку классов, которая пытается абстрагировать детали ... Essential COM расскажет вам, что это за детали (и при этом реализует свою собственную библиотеку / каркас). 1007 *

1 голос
/ 23 мая 2009

На самом деле, если вы хотите больше узнать о COM, Microsoft публикует книгу о COM и о том, как он работает ... http://www.amazon.com/Inside-Microsoft-Programming-Dale-Rogerson/dp/1572313498/ref=sr_1_2?ie=UTF8&s=books&qid=1243029018&sr=8-2

...