Обеспечивают ли COM или CORBA совместимость компилятора или стандартной библиотеки?

Этот вопрос следует за предыдущим ниже:

Простой способ гарантировать двоичную совместимость для библиотеки C ++, C связь?

Я задавался вопросом, обеспечивает ли создание интерфейсных функций C ++ DLL или разделяемой библиотеки с компоновкой C совместимость компилятора и стандартной библиотеки.

extern "C" someAPI ();

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

Но в последнее время читаю книги о Windows COM. И я думаю, что COM может обеспечить совместимость, которую я хотел. И еще кое-что CORBA.

Так что мне интересно, действительно ли эти вещи, COM и CORBA, способствуют совместимости компилятора и стандартной библиотеки?

Я думаю, сетевая библиотека ACE использует CORBA. И это только одно, что я знаю о CORBA. Разве сегодня CORBA не популярна? А как насчет COM? ActiveX может исчезнуть, но WDF (Windows Driver Foundation) зависит от COM.

Большое спасибо!


person Jeonghum    schedule 02.01.2018    source источник
comment
Я не знаком с CORBA. COM обеспечивает двоичную совместимость (среди прочего) путем строгого ограничения разрешенных типов параметров метода и возвращаемых значений подмножеством типов POD. В частности, никакие классы стандартных библиотек (или, если на то пошло, классы, определяемые пользователем) не могут быть упомянуты в интерфейсе COM, что делает вопрос совместимости стандартных библиотек спорным.   -  person Igor Tandetnik    schedule 02.01.2018


Ответы (1)


Да, COM был создан, помимо прочего, для решения проблем повторного использования исходного кода (и .obj, статической библиотеки и т. Д.), Независимо от того, является ли этот источник C / C ++ или что-то еще.

Суть COM (макет v-table + IUnknown, забудьте о регистрации, OLE, автоматизации, маршалинге и других дополнительных вещах) очень проста (на самом деле, ее сложно сделать проще). Поскольку он полагается только на двоичные контракты, вы можете писать код COM-клиента и / или сервера, используя любой язык (и любую платформу, но на самом деле его использует только Windows). Таким образом, у вас может быть 32-битный COM-клиент, написанный на python, для общения с 64-битным COM-сервером, написанным, например, на C ++ (ну, этот пример на самом деле требует некоторого межпроцессного маршалинга, поэтому это не чистый легкий COM).

COM очень далек от того, чтобы умереть или исчезнуть (потому что это, опять же, довольно просто). «ActiveX» - это сочетание маркетинга и технологий, но в основном это COM, и он широко используется в Windows, Windows и третьими сторонами.

COM через физическую сеть (DCOM) действительно исчезает (в пользу других технологий, таких как Интернет, сокеты, HTTP, REST или в целом технологии, более простые, чем COM), и то, что все еще используется сегодня, в основном находится в процессе и вне его. процесс COM (out-process - это как-то DCOM на той же машине).

Я знаю, что когда-то CORBA была сильным конкурентом COM (особенно потому, что она была доступна на нескольких платформах, включая Windows), но, похоже, она серьезно сокращается, в том числе в пользу тех же более простых технологий (веб и т. Д.). .

person Simon Mourier    schedule 02.01.2018