Нет единого ответа на вопрос, который работает везде. В общем, ответ заключается в том, что оба языка должны согласовать «что-то» - набор или правила или «протокол вызова».
На высоком уровне любой протокол должен указывать три вещи:
- «Открытие»: как найти друг друга.
- «связывание»: как установить соединение (после того, как они узнают друг о друге).
- «Вызов»: как на самом деле делать запросы друг другу.
Подробности сильно зависят от самого протокола.
Иногда оба языка сговариваются, чтобы работать вместе. Иногда эти два языка соглашаются поддерживать некоторый внешний протокол. В наши дни ОС или «среда выполнения» (.NET и Java) также часто участвуют. Иногда способность распространяется только в одну сторону («A» может вызвать «B», но «B» не может вызвать «A»).
Обратите внимание, что это та же проблема, с которой сталкивается любой язык при взаимодействии с ОС. Знаете, ядро Linux написано не на схеме!
Давайте посмотрим некоторые типичные ответы из мира Windows:
C с C ++ : C ++ использует искаженный («искаженный») вариант «протокола C». C ++ может вызывать C, а C может вызывать C ++ (хотя имена иногда бывают довольно грязными, и для перевода им может потребоваться внешняя помощь). Это не просто Windows; это в целом верно для всех платформ, которые поддерживают обе. В большинстве популярных ОС также используется «протокол C».
VB6 против большинства языков : предпочтительным методом VB6 является "протокол COM". Другие языки должны иметь возможность писать COM-объекты для использования из VB6. VB6 также может создавать COM-объекты (хотя и не все возможные варианты COM-объектов).
VB6 также может говорить об очень ограниченном варианте «протокола C», а затем только делать вызовы снаружи: он не может создавать объекты, с которыми можно напрямую общаться через «протокол C».
.NET языки : все языки .NET взаимодействуют компилируются на один и тот же язык низкого уровня (IL). Среда выполнения управляет связью, и с этой точки зрения все они выглядят как один и тот же язык.
VBScript и другие языки : VBScript может использовать только часть протокола COM.
Еще одно замечание: SOAP «Веб-сервисы» на самом деле также являются «протоколом вызова», как и многие другие веб-протоколы, которые становятся популярными. В конце концов, речь идет о том, чтобы говорить с кодом, написанным на другом языке (и при этом работать в другом окне!)