COM / OLE / ActiveX / IDispatch путаница - PullRequest
7 голосов
/ 04 мая 2009

Я не могу обернуть голову в различия между этими терминами.

Являются ли COM и ActiveX синонимами?

Является ли объект ActiveX просто COM-объектом, который предоставляет IDispatch?

На многих старых страницах MSDN упоминается IDispatch без контекста COM. У него есть отдельная история, и он только что был представлен под «зонтиком» COM позже в его жизненном цикле?

Где вписывается OLE? Является ли его (значительное) присутствие в именах MFC и MSDN в целом - все это просто наследие?

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

Ответы [ 3 ]

8 голосов
/ 05 мая 2009

Найдены некоторые цитаты из COM-программирования на примере :

Еще одна вещь, которую вы быстро найдете с COM - это то, что у маркетинга была экскурсия день с терминологией. Скорее тогда помогая продвигать понимание, вы найдете в большинстве случаев это способствует тайна. ... OLE, ActiveX, Remotable Объекты - что означает, что это неделю? ...

COM развился из решения для конкретная проблема - как разрешить слово процессор для редактирования электронной таблицы в письмо без выхода пользователя текстовый процессор, чтобы сделать это. это Решение было названо OLE. ... Тем не мение, со вторым выпуском OLE (OLE2), его создатели изменили OLE32.DLL на раскрыть больше основных функций OLE, чтобы его API можно было использовать разрешить любому приложению доступ к функциональность другая. Это API, который не сильно изменился с 1993 года, это то, что считается COM API. ...

Как только COM API был открыт, Microsoft использовала это, чтобы создать то, что было затем вызвал элементы управления OLE, чтобы сложные элементы управления (например, кнопки эта спираль, списки, которые играют музыка) написана на Visual C ++, чтобы быть доступны для Visual Basic Приложения. В конце концов это то же самое технология была использована для контроля быть загруженным и используемым вашей сетью браузер. На данный момент имя изменено на элементы управления ActiveX или просто обычный ActiveX исключительно для маркетинга причины. Хотя вы можете упаковать любой функциональность в элементе управления ActiveX, его требования были специализируется на поддержке пользователя управление интерфейсом.

Мне по-прежнему любопытно последнее предложение - должен ли COM-объект удовлетворять некоторым дополнительным требованиям, чтобы считаться элементом управления ActiveX? - но этого достаточно, чтобы отпустить.

Спасибо за ваши ответы!

4 голосов
/ 04 мая 2009

ActiveX предназначен для COM, хотя ActiveX обычно используется в контексте «элементов управления ActiveX», которые являются объектами GUI.

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

OLE - более ранняя версия COM.

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

Относительно OLE: COM имеет свои корни в OLE. Но сегодня можно считать, что OLE построен поверх COM и в основном используется для того, что предполагает его название - связывание и встраивание документов. Хотя сам COM определяет только пару интерфейсов (IUnknown, IClassFactory, IMalloc и т. Д.), OLE добавляет целый ряд дополнительных интерфейсов, таких как IMoniker, IOleItemComtainer и т. Д.

Подводя итог: COM является основой, ActiveX и OLE являются слоями поверх COM.

...