IDL

Все реализуемые в решении интерфейсы необходимо описать в idl-файлах. Каждый idl-файл представляет собой пакет объявлений на языке IDL.

idl-файл содержит следующие разделы:

  1. Имя пакета.

    Единственный обязательный раздел.

    Объявление имени пакета имеет следующий формат:

    package <имя описываемого пакета>

    Имя пакета может быть составным. В этом случае оно используется для формирования пути к idl-файлу, например:

    /* Module.idl расположен по следующему пути: a/b/c/Module.idl */

    package a.b.c.Module

  2. Импорт внешних пакетов.

    Инструкция импорта пакета имеет следующий формат:

    import <имя внешнего пакета>

    Позволяет ввести в область видимости idl-файла элементы внешнего пакета: именованные константы и пользовательские типы, включая структуры и вариантные типы.

  3. Объявление структур, вариантных типов, именованных констант и синонимов.
  4. Объявление интерфейсов.

    Объявление интерфейса имеет следующий синтаксис:

    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);

}

В начало