Подтвердить что ты не робот

Что такое IDL?

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

4b9b3361

Ответ 1

Язык определения интерфейса (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 stub и x server для компиляции и связывания с вашим кодом клиента и сервера, чтобы заставить RPC работать.

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

Ответ 2

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

Ответ 3

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

Существует несколько разных стандартов для двоичных компонентов, обычно COTS или Commercial Off The Shelf, и то, как клиент связывается с бинарным компонентом, может варьироваться хотя традиционно используется некоторая версия Remote Procedure Call или RPC. Двумя такими стандартами являются общая объектная модель Microsoft или стандарт COM и общий объект Запросить брокер или стандарт CORBA. Существуют и другие стандарты для компонентов, таких как плагины Firefox или плагины для других приложений, таких как сама Visual Studio, однако они не обязательно используют какую-либо форму описания интерфейса Язык использует вместо этого какой-то комплект разработки программного обеспечения или SDK со стандартизованными и хорошо известными интерфейсами к API.

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

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

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

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

Visual Studio, мой опыт работы с С++, содержит несколько мастеров, которые можно использовать для создания примера, чтобы вы могли играть с этим. Если вас это интересует, вы можете создать рабочее пространство, а затем в рабочем пространстве вы можете создать проект ATL для создания элемента управления, а затем простой проект диалога MFC, чтобы проверить его. Использование ATL для вашего управления COM скрывает довольно много деталей, которые вы можете исследовать позже, и простой проект диалога MFC предоставляет простой способ создания контейнера. Вы также можете использовать инструмент Active Test Control Container, доступный в Visual Studio, для проведения предварительного тестирования и посмотреть, как работают методы и свойства.

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Существует очень хорошая статья об основах IDL в ссылка

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