COM / OLE / ActiveX / IDispatch путаница

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

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

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

Многие старые страницы MSDN упоминают IDispatch без какого-либо контекста COM. У него есть отдельная история, и он был только что представлен под "зонтиком" COM позже в его жизненном цикле?

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

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

3 ответа

Решение

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

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

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? - но этого достаточно, чтобы отпустить.

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

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

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

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

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

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

Другие вопросы по тегам