Что такое IDL?

Что означает IDL? Я погуглил его и узнал, что он означает Язык определения интерфейса, который используется для определения интерфейса для компонентов. Но, на практике, какова цель IDL? Использует ли его Microsoft?

6 ответов


язык определения интерфейса (IDL) используется для настройки связи между клиентами и серверами в удаленных вызовах процедур (RPC). Было много вариантов этого, таких как Sun RPC, ONC RPC, DCE RPC и так далее.

в основном, вы используете IDL для указания интерфейса между клиентом и сервером, чтобы механизм RPC мог создавать заглушки кода, необходимые для вызова функций по сети.

RPC необходимо создать функции заглушки для клиента и сервер, используя информацию IDL. Он очень похож на прототип функции в C, но конечный результат немного отличается, таких как:

+----------------+
| Client         |
|  +----------+  |  +---------------+
|  |   main   |  |  | Server        |
|  |----------|  |  |  +----------+ |
|  | stub_cli |------->| stub_svr | |
|  +----------+  |  |  |----------| |
+----------------+  |  | function | |
                    |  +----------+ |
                    +---------------+

в этом примере, вместо того, чтобы позвонить function в той же программе, main вызывает функцию заглушки клиента (с тем же прототипом, что и function), который отвечает за упаковку информации и ее передачу по проводам другому процессу. Это может быть одна и та же машина или другая машина, это не имеет значения - одна из преимущества RPC в том, чтобы иметь возможность перемещать серверы по желанию.

на сервере есть процесс "прослушиватель", который получит эту информацию и передаст ее на сервер. Заглушка сервера получает информацию, распаковывает ее и передает в реальную функцию.

реальная функция затем делает то, что ей нужно, и возвращается к заглушке сервера, которая может упаковать информацию о возврате (как код возврата, так и любой [out] или [in,out] переменные) и передать его обратно в корешок клиента.

заглушка клиента затем распаковывает это и передает его обратно main.

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

фактический IDL может выглядеть так:

[uuid(f9f6be21-fd32-5577-8f2d-0800132bd567),
    version(0),
    endpoint("ncadg_ip_udp:[1234]", "dds:[19]")]
interface function_iface {
    [idempotent] void function(
        [in] int handle,
        [out] int *status
    );
}

все это наверху в основном сетевая информация, мясо ее находится внутри раздела интерфейса, где показаны прототипы. Это позволяет компилятору IDL создавать заглушку x и x серверные функции для компиляции и связывания с клиентским и серверным кодом, чтобы заставить RPC работать.

Microsoft использует IDL (я думаю, что у них есть компилятор MIDL) для COM-материалов. Я также использовал сторонние продукты с операционными системами MS, как DCE, так и ONC RPC.


есть еще Interactive Язык Данных который я использовал для анализа научных данных, но, возможно, из контекста вам ясно, что это не то, что означает этот IDL.


IDL-это аббревиатура от Язык Определения Интерфейсов из которых существует несколько вариантов в зависимости от поставщика или стандартной группы, определившей язык. Цель IDL-описать интерфейс для некоторой службы, чтобы клиенты, желающие использовать службу, знали, какие методы и свойства предоставляет служба, интерфейс. IDL обычно используется с двоичными интерфейсами, и файл языка IDL описывает типы данных, используемые в двоичном файле взаимодействие.

Существует несколько различных стандартов для двоичных компонентов, обычно Детские кроватки или реклама с полки, и как клиент общается с двоичным компонентом, может варьироваться, хотя традиционно некоторая версия удаленный вызов процедуры или RPC есть. Два таких стандарта являются Microsoft Common Object Model или COM standard и Common Object Request Broker или CORBA standard. Существуют и другие стандарты для такие компоненты, как Плагины Firefox или плагины для других приложений, таких как сама Visual Studio, однако они не обязательно используют какую-то форму языка описания интерфейса, используя вместо этого какой-то набор для разработки программного обеспечения или SDK со стандартизированными и хорошо известными интерфейсами к API.

то, что позволяет IDL, - это большая степень гибкости в создании компонентов, предлагающих услуги различных видов, которые из-за их двоичной природы могут быть используется с различными языками программирования и различными средами.

Microsoft использует диалект IDL с COM-объектами, и Microsoft IDL не совпадает с CORBA IDL, хотя есть сходства, поскольку они имеют общие корни языка. IDL-файл содержит описание интерфейсов, поддерживаемых COM-объекта. COM позволяет создавать in Process services (может использовать RPC или прямые вызовы DLL) или Out of Process services (использует RPC). Этот идея COM заключается в том, что клиент должен знать идентификатор компонента вместе с интерфейсом, чтобы иметь возможность его использовать. Клиент запрашивает COM-объект, затем запрашивает объект класса из Фабрики COM-объекта, который поддерживает интерфейс, который клиент хочет использовать, а затем использует COM-объект через этот интерфейс.

Microsoft предоставляет компилятор MIDL, который обрабатывает IDL-файл для создания библиотеки типов, предоставляя информацию пользователям COM-объекта об интерфейсе и необходимых заглушках для маршалинга данных по интерфейсу между клиентом и службой.

маршалинг данных в основном означает, что заглушка берет данные, предоставленные клиентом, упаковывает их и отправляет в службу, которая выполняет некоторые действия и отправляет данные обратно. Эта отправка и получение данных может осуществляться через некоторые службы RPC или через прямые вызовы функций DLL. Ответ от сервиса переводится в форму, подходящую для клиента и затем предоставляется клиенту. Таким образом, в основном функциональность маршалинга-это адаптер (см. шаблон дизайна адаптера) или мост (см. шаблон проектирования мост) между клиентом и службой.

Visual Studio, мой опыт работы с C++, содержит ряд мастеров, которые можно использовать для создания примера, чтобы вы могли играть с этим. Если вы заинтересованы, вы можете создать рабочее пространство, а затем в рабочем пространстве вы можете создать ATL проект для создания элемента управления, а затем простой проект диалога MFC для его тестирования. Использование ATL для управления COM скрывает довольно много деталей, которые вы можете исследовать позже, и простой проект диалога MFC предоставляет простой способ создания контейнера. Для предварительного тестирования и просмотра работы методов и свойств можно также использовать средство контейнера тестов ActiveX, доступное в Visual Studio.

есть также ряд примеров проектов на веб-сайтах, таких как codeproject.com - ... Например, вот один с помощью C, чтобы выставить все уродливые сантехника за COM и вот это один с использованием C++ без ATL.


Это язык,который использовался в эпоху COM для определения интерфейсов (предположительно) нейтральным языком.


Он определяет интерфейс, который будет использоваться для связи с открытой службой в другом приложении.

Если вы используете мыло, вы узнаете о WSDL. WSDL-это еще одна форма IDL. IDL обычно относится к microsoft COM или CORBA IDL.


IDL имеет жизненно важное значение в 2 случаях. 1. Создание DLL прокси / заглушки для exe-серверов. 2. Создание библиотеки типов для серверов автоматизации.

есть очень хорошая статья для основ IDL в ссылке

чтобы изучить IDL, лучше читать собственные файлы заголовков idl компиляторов, которые приведены включают подкаталог пакета VC++.