Что подразумевается под IDL? Я искал его и выяснил, что это означает интерфейс определения языка, который используется для определения интерфейса для компонентов. Но на практике, какова цель IDL? Использует ли Microsoft его?
Что такое IDL?
Ответ 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С++.