Что такое 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++.