Какова другая цель.H заголовочного файла и файла IDL?

Я изучаю COM, таким образом, существуют некоторые основные вопросы, озадачивающие меня...

Я знаю, что файл IDL используется для описания определений метода (или так называемый 'контракт' между программными модулями), и.H заголовочные файлы содержат что-то как прототип метода, который выглядит подобным тому, для чего предназначен IDL. Так, почему эти две вещи, сосуществуют? Разве тот не достаточно?

Большое спасибо.

5
задан smwikipedia 12 April 2010 в 17:30
поделиться

4 ответа

Язык описания интерфейса (IDL) сам по себе является небольшим языком, который обеспечивает независимый от языка программирования способ описания интерфейса. Инструменты генерируют файлы .h из вашего .idl.

Если бы у вас был только файл .h, было бы невозможно связать его с другим языком программирования. Файлы .h очень специфичны только для кода C и C ++.

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

8
ответ дан 13 December 2019 в 22:04
поделиться

Из Википедии:

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

С другой стороны, файлы .H используются исключительно компилятором C/C++ для генерации кода-объекта. Таким образом, они специфичны для конкретного языка.

1
ответ дан 13 December 2019 в 22:04
поделиться

Файл .h - это заголовочный файл, который позволяет включать объявления классов, структур и так далее. Он решает проблемы компилятора и работает с кодом, который является локальным. С другой стороны, когда у вас есть различные сущности, которые должны общаться, как в случае CORBA, вам нужно обрабатывать передачу данных между сущностями, которые могут находиться в разных адресных пространствах, например, две разные программы, запущенные на одном компьютере или даже на разных компьютерах. Все эти программы могут быть написаны на совершенно разных языках, но при этом они должны уметь общаться. IDL позволяет вам определить интерфейс, который эти компоненты экспортируют в мир через канал связи ORB. Уровень компонентов выше, чем уровень классов. Компонент, для упрощения, можно рассматривать как совокупность классов, выполняющих сложную задачу.

IDL описывает интерфейс программного компонента в независимом от языка/платформы виде, делегируя задачу реализации инструментам конкретного производителя. Эти инструменты преобразуют определение IDL в реальные классы (с их включениями) для вызывающей стороны и класс-заглушку, который можно скомпилировать и подключить к вызывающей стороне. Класс-заглушка раскрывает интерфейс удаленной службы callee, как определено в IDL, но он не выполняет никаких задач, кроме отправки запроса удаленной службе через ORB и обработки результата для вызывающей стороны.

Edit: on your answer in the comment

Спасибо, Стефано. Итак, IDL - это не что иное, как еще один "стандарт", уважаемый различными языками, а различные языки, поддерживающие IDL, имеют свои собственные инструменты для понимания IDL-файла и конвертировать его в понятный формат, например, заголовочный файл C++ содержащий объявление класса ORB. Прав ли я?

И да, и нет. IDL - это стандарт для представления интерфейса компонента, интерфейса, который экспортируется (среди многих других вещей) для межпроцессного взаимодействия. Группа OMG (которая стоит за стандартизацией corba и idl) также имеет отображения между концепциями idl и различными языками: см. http://www.omg.org/technology/documents/idl2x_spec_catalog.htm

Вы не можете сказать, что IDL - это стандарт, соблюдаемый языком. IDL - это высокоуровневое выражение того, что вы можете сделать, мучительно, вручную. Вы можете думать об этом как об одном и том же понятии между языком высокого уровня, таким как C, и языком низкого уровня, таким как ассемблер. Компилятор берет код на C и создает ассемблерный код для целевой архитектуры (x86, sparc, что угодно). Аналогично, инструмент, предоставляемый производителем CORBA (не производителем компилятора), который анализирует IDL, выдает результаты, специфичные для конкретного языка, что позволяет вам пропустить кодирование скучных низкоуровневых деталей CORBA.

Теперь, я не знаю, как обстоит дело в мире COM, но поскольку COM является копией CORBA (или так я слышал), концепции должны быть одинаковыми.

1
ответ дан 13 December 2019 в 22:04
поделиться

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

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

Также вы можете скомпилировать файл IDL в библиотеку типов, что само по себе является очень полезной вещью. Вы можете импортировать библиотеку типов в различные языки для потребления COM-объекта. Вы можете включить библиотеку типов в ресурсы COM-сервера, и это может дать вам Automation marshalling, который позволит вам сделать out-proc сервер из in-proc сервера без написания чего-либо. Вы также можете использовать шаблоны ATL для реализации позднего связывания в вашем COM-сервере без написания чего-либо, если у вас есть библиотека типов в ресурсах вашего COM-сервера.

0
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: