KasperskyOS Community Edition 1.0

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) и перечисляются через запятую. Пример объявления интерфейса:

    interface {

    // Объявление метода Ping

    Ping(in UInt32 value, out UInt32 result);

    }

    Для возврата кодов ошибок, возникающих в результате обработки запроса сущностью-сервером, не рекомендуется использовать out-аргументы. Вместо них рекомендуется использовать специальные error-аргументы. Подробнее см. Работа с ошибками в IDL.

IDL поддерживает однострочные и многострочные комментарии в стиле C++.

Примеры IDL-файлов

В простейшем случае IDL-описание содержит только имя и объявление интерфейса:

Ping.idl

/* Ping — имя интерфейса */

package Ping

/* Объявление методов интерфейса */

interface {

// Объявление метода 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 {

Baz(in BazInfo a, out UInt32 b);

}