Все реализуемые в решении интерфейсы необходимо описать в idl-файлах. Каждый idl-файл представляет собой пакет объявлений на языке IDL.
idl-файл содержит следующие разделы:
Единственный обязательный раздел.
Объявление имени пакета имеет следующий формат:
package <имя описываемого пакета>
Имя пакета может быть составным. В этом случае оно используется для формирования пути к idl-файлу, например:
/* Module.idl расположен по следующему пути: a/b/c/Module.idl */
package a.b.c.Module
Инструкция импорта пакета имеет следующий формат:
import <имя внешнего пакета>
Позволяет ввести в область видимости idl-файла элементы внешнего пакета: именованные константы и пользовательские типы, включая структуры и вариантные типы.
Объявление интерфейса имеет следующий синтаксис:
interface <имя интерфейса> {
<Объявления методов>
}
Внутри фигурных скобок находятся объявления методов, имеющие следующий синтаксис:
<Имя метода> (<аргументы>);
Аргументы разделяются на входные (in
) и выходные (out
) и перечисляются через запятую. Пример объявления интерфейса IPing
:
interface IPing {
// Объявление метода Ping
Ping(in UInt32 value, out UInt32 result);
}
IDL поддерживает однострочные и многострочные комментарии в стиле C++.
Примеры idl-файлов
В простейшем случае idl-описание содержит только имя пакета и объявление интерфейса:
ping.idl
/* ping — имя пакета */
package ping
/* Объявление интерфейса IPing */
interface IPing {
// Объявление метода Ping
Ping(in UInt32 value, out UInt32 result);
}
Пример более сложного idl-описания:
Foo.idl
// Объявление имени пакета
package Foo
// Инструкции импорта пакетов
import Bar1
import Bar2
// Объявление именованной константы
const UInt32 MaxStringSize = 1024;
// Объявление синонима для пользовательского типа
typedef sequence <Char, MaxStringSize> String;
// Объявление структуры
struct BazInfo {
Char x;
array <String, 100> y;
sequence <sequence <UInt32, 100>, 200> y;
}
// Объявление интерфейсов
interface IFoo {
foo (in UInt32 a);
bar (in UInt32 a, out UInt32 b1, out UInt8 b2);
}
interface IBaz {
baz (in BazInfo a, out UInt32 b);
}
В начало