Я не эксперт в компонентной объектной модели (COM), но насколько я понимаю, она работает примерно так:
Программа A («серверная» программа) предоставляет интерфейс COM, скажем, через файл TLB.
Клиентская программа использует этот интерфейс и вызывает его функции (и все базовые функции выполняются для вас бесплатно).
Таким образом, в этом случае, когда запущена программа «Сервер» и программа «Клиент» связывается с «Сервером» с помощью COM-объекта.
Каждая из программ (процессов) имеет свое адресное пространство.
Теперь с MSXML все немного по-другому.
Насколько я понимаю, msxmlX.dll является COM-библиотекой, но, скажем, когда я неявно ссылаюсь на нее (используя msxmlX.h и msxmlX.lib) во время выполнения, она загружается в то же пространство памяти, что и мой исполняемый файл.
Итак, в этом случае ПОЧЕМУ COM-объект используется, когда явно не происходит IPC (и msxml.dll, и «мое приложение» используют одну и ту же память и могут «общаться» так же просто, как вызов функции) ???
Вы можете создавать COM-объекты либо в процессе, либо вне процесса, либо на другом компьютере полностью. Выбор зависит от ваших требований.
COM разработан, чтобы сделать программные компоненты многоразовыми и независимыми от языка.
Это не просто механизм для облегчения IPC, как вы предполагаете.
Других решений пока нет …