Найкраще місце для вивчення компонентної моделі об'єкта [закрито]


13

Мені потрібно вивчити COM для мого поточного проекту. Я ноб, і мені не вдалося знайти хороших вихідних точок для COM. Я розглядав MSDN та googling ... Я знайшов кілька цікавих статей на codeproject.com, але мене не влаштовує. Чому ми використовуємо COM? Чому воно існує? У яких місцях він існує? ..... і так далі .. Отже, скажіть, будь ласка, де я можу знайти відповіді на ці питання?


3
Чому ми використовуємо COM? В основному ми намагаємось цього не робити. У яких місцях він існує? Хворобливі застарілі бази кодів, як правило.
Carson63000

@carson actully я розробляю програмне забезпечення для моніторингу, де мені потрібно отримати значення об’єктів "COM". Звідси новий знайдений Квест ..
Chani

1
Якщо я пам'ятаю правильно, з кращих 3 веб-статей про COM, 2 - на MSDN (старі статті статті), а 1 - на CodeProject ... очевидно, є сотні інших, дещо корисних, так що це як пошук голки в копиці сіна. (і дякую Google, що повертає лише сайти в TLD ".com", коли я шукаю "COM" ...)
rwong

@ Carson63000 Так правда боляче ... збирається зараз плакати в кутку.
Евікатос

Відповіді:


18
  • По-перше, COM - це як об'єктно-орієнтоване програмування. COM-інтерфейс - це абстрактний інтерфейс.
  • COM має перевагу перед власним вбудованим OOP кожної мови тим, що ви можете мати COM-класи, реалізовані на різних мовах та / або складені різними версіями компіляторів, і вони все одно зможуть взаємодіяти. Це називається "бінарний інтерфейс програми" (ABI)
  • COM використовує підрахунок посилань. Спочатку це може бути прикро, але як тільки ви дізнаєтесь про розумні покажчики, ваше життя стане набагато простішим, і ви побачите, що поняття підрахунку посилань дуже легко зрозуміти.
  • COM використовує дивний спосіб кастингу класів, а саме "Інтерфейс запитів".

Вивчення IUnknown - це перший крок.

Хорошим COM-інтерфейсом, який підходить для вивчення початківців, є інтерфейс IStream. Ви можете практикувати COM, реалізуючи інтерфейс IStream, використовуючи безліч видів способів зберігання даних.


Додано 28.09.2012:

Після винайдення механізму COM люди в Microsoft виявили, що ці механізми відкривають двері до незвичайних хитрощів програмування, які не є ортодоксальними OOP. На найнижчому рівні - IUnknown.QueryInterfaceце лише метод; він може робити все, що завгодно. Ці трюки змушують COM залякати учнів, оскільки вони можуть визнати недійсними основні міркування, які можна запозичити у ООП.

Документація Microsoft в MSDN витрачає багато часу, кажучи "COM - це не ..." або "Не припускайте", пояснюючи, як ці незвичайні хитрощі можуть порушити ваш код.

Дизайнери COM використовують Принцип заміни Ліскова ("L" у SOLID ), щоб переконатися, що їх численні інтерфейси та використання хитрощів не скасовують базові міркування OOP або роботу програми.

Якщо ваш проект не використовує цих хитрощів, добре бачити COM лише з точки зору OOP. Якщо ваш проект використовує ці хитрощі, вам потрібно буде бачити COM як код, що змінюється.

(Жарт: Нам довелося провести стільки часу з L, що ми зазвичай ігноруємо чотири інші принципи.)


9

Основна причина COM - надання об'єктно-орієнтованого інтерфейсу зв'язку між додатком та іншими програмами та dll, які можуть жити в різних просторах пам'яті, і між об'єктами, які можуть мати різні внутрішні представлення об'єктів.

Що слід пам’ятати, вивчаючи COM, це те, що в той час, коли C ++ був королем, і програми, що називалися dll, використовували C. Не було поширеного ABI (як говорить @rwong), а COM - це рішення для Microsoft.

Напевно, варто ознайомитися з бібліотекою активних шаблонів (ATL) для візуальної студії, що також полегшує використання COM.

Пару книг, які мені здалися корисними ще в той день

http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1

http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4

чт


7

Я спочатку дізнався про COM з книги Learning DCOM (DCOM - це лише розширення COM, книга - це здебільшого про COM). Це старше десяти років, і це повинно бути дешевим, якщо ви звикли до нього (оскільки COM вже не дуже гарячий, навіть не в світі Microsoft, навіть якщо він все ще використовується для interop).

Основна причина існування COM - це сприяння розробці на основі компонентів, що в основному означає, що замість зв'язування бібліотек під час компіляції коду ви посилаєтесь на інтерфейс (опис способу спілкування із зовнішнім компонентом) та використовуєте деяку реалізацію що при розгортанні. Це лежить в основі більшості власних технологій Microsoft.

У системі є підтримка деяких функцій, які були крутими, перш ніж все вдалося (наприклад, підрахунок посилань та самоопис (через IDispatch)).


5

COM - це стандарт, створений у 90-х роках, що дозволяє розмовляти між собою різними програмами. Найважливішим є двійковий стандарт, який дозволяє одному програмному забезпеченню створити або прив'язати до об'єкта, а потім зателефонувати в цей інтерфейс. Це дозволяє вам робити такі речі, як створити DLL в C ++, яку можна викликати на сторінці ASP (COM-об'єкти), або створити елемент керування в Delphi, який можна поставити на діалогове вікно VB (елементи керування ActiveX) або робочий аркуш Excel. Коли ви вставляєте зображення в Word, він також використовує COM, вбудовуючи в слово окрему програму. Менш популярним є DCOM для виклику віддалених об'єктів, зазвичай є більш прості способи зробити це.

Тож Com / ActiveX / DCOM був дуже популярний 10 років тому з VB, VBA, C ++ / ATL, Delphi. Дотнет набагато простіший, хоча C # замінив більшість використання COM і VB тощо

Тим не менш, існує багато COM-інтерфейсів, які існують, до яких можна подзвонити з додатку dotnet або Java або C ++. (Ти не кажеш)

Якщо вам потрібно викликати COM-інтерфейси, VB - це найпростіший спосіб зробити це. У Dotnet 4.0 C # є ключове ключове слово динамічне, що значно спрощує виклик інтерфейсів IDispatch, що, мабуть, є чудовим рішенням, на яке слід звернути увагу.

Якщо вам потрібно знати багато деталей, вам дійсно потрібно використовувати C ++ та ATL, викликати API C типу CoCreateInstance. Уникайте цього, якщо ви можете, як і його старий технологій, і не дуже корисно, дотримуйтесь рекомендацій, наведених вище.

Я не впевнений, яке програмне забезпечення для моніторингу ви дивитесь, але воно, ймовірно, буде доступне за допомогою класів System.Management в dotnet.


2

Наступні описи можуть бути корисними для огляду COM:

Перше відео розповідає про загальну ідею створення бінарних компонентів для повторного використання кодів, написаних на різних мовах (незалежно від мови) та в різних машинах (процесах) (місце незалежне / прозоре). Ця технологія використовується в деяких програмних компаніях для інтеграції з іншим програмним забезпеченням (компаніями) замість того, щоб купувати їх програмне забезпечення та вбудовувати їх у власні або писати коди з нуля у своїх системах.

Ця технологія має три різні версії (вкладення):

OLE / COM / DCOM / ActiveX для розробників C ++ (ATL використовується для полегшення роботи програміста)

JavaBeans / RMI / EJB для розробників Java

CORBA / IIOP

Просто подумайте про це як про технологію, яка стане в нагоді, коли ваше програмне забезпечення написане на Java, і ви хочете додати в нього функціонал, який вже існує в пакеті, але він написаний на C ++ і навіть, можливо, розташований на іншій машині, а не в ваша локальна машина. Як ви називаєте "нове", як ви створюєте об'єкти та називаєте методи з них?

Наступні книги, які я бачив у людей, які роблять кодування COM, мають будь-яку з них у своїх книжкових полицях:

  • Практикум для розробників для COM та ATL 3.0

  • Всередині ком

  • Основна COM

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.