Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Руководство разработчика на IDL

Устоявшаяся практика IDL

Мы продолжаем работать над этой документацией. Новые материалы будут добавляться к существующей основе. Пожалуйста, шлите все вопросы и комментарии в группу netscape.public.mozilla.xpcom.


Перечисления и константы

В XPIDL константы определяются внутри интерфейсов и в JavaScript представляются свойствами экземпляров классов которые реализуют эти интерфейсы. Значения констант должны иметь тип short или long. Константы других типов (например, string) возможно реализовать с помощью свойств интерфейса с фиксированными значениями или с помощью методов, возвращающих эти значения.

Код XPIDL Пример JavaScript
interface nsIFoo {
  const short ONE = 1;
};
var myFoo = Components.classes["@mydomain.org/sample/foo;1"].CreateInstance();
var myFoo = myFoo.QueryInteface(Components.interfaces.nsIFoo);
print(myFoo.ONE);
OR
print(Components.interfaces.nsIFoo.ONE);

Возвращаемые типы

Вы можете использовать типы, отличные от void, для того чтобы разработчикам скриптов был доступен непосредственный возврат значений. (В C++ возвращаемое значение преобразуется в выходной параметр.)

native и необработанные (raw) типы C++

Любой интерфейс, который содержит нативные или сырые (raw) типы C++ не может использоваться в скриптах. Если интерфейс или метод будет отмечен как [scriptable] и, вместе с тем, будет содержать нативные или необработанные типы C++, то компилятор XPIDL будет считать это ошибкой.

Отдельные проблемные методы в интерфейсе могут быть помечены как нескриптуемые с помощью конструкции [noscript] перед описанием метода. Методы, отмеченные как [noscript] будут недоступны для использования в скриптовых языках.

Код XPIDL Комментарий
[ptr] native nsNativeType(nsFileSpec);

[scriptable] interface foo {
  void BadMethod(in nsNativeType aNativeType);
};
Компиляция завершается ошибкой:
cannot_script.idl:4: Error: methods in [scriptable] interfaces which are non-scriptable because they refer to native types (parameter "aNativeType") must be marked [noscript]

[cannot_script.idl:4: Ошибка: методы в [scriptable] интерфейсах, которые не могут использоваться в скриптах, так как ссылаются на нативные типы (параметр "aNativeType"), должны быть отмечены как [noscript]]

[ptr] native nsNativeType(nsFileSpec);

[scriptable] interface foo {
  [noscript] void BadMethod(in nsNativeType aNativeType);
};
Заголовочные файлы C++ генерируются нормально. Метод BadMethod недоступен из JavaScript.

Передача строк

Все строки, которые возвращаются в C++ посредством выходных параметров, должны быть размещены в памяти с помощью nsIAllocator чтобы время жизни строк было управляемым в XPConnect. Если строки не были размещены с помощью nsIAllocator, то строка окажется потерянной, что влечет за собой утечку памяти и крах.

Смотрите вопрос "How do I make 'out string' work right?" ("Как мне добиться, чтобы 'out string' правильно работало?") в FAQ'е по XPConnect для получения дополнительной информации о работе со строковыми выходными параметрами.

Названия методов

При выборе названий для своего интерфейса рекомендуется использовать верблюжачьюНотацию, в которой первая буква является маленькой, а все последующие члены идентификатора начинаются с больших букв. Этот стиль соответствует существующему в JavaScript соглашению, и такие названия будут натурально смотреться в скриптах.

В Mozilla главное соглашение об именовании методов в коде C++ требует ВерблюжачьейНотации (первая буква - в верхнем регистре). Соответственно этому компилятор xpidl капитализирует названия методов в сгенерированных заголовках C++. Но даже если вы создаете IDL для существующего интерфейса, реализация которого в C++ следует ВерблюжачьейНотации, будет лучше, если вы опишите его в IDL согласно верблюжачьейНотации (первая буква - в нижнем регистре). Это более привычно для разработчиков на JavaScript, а ваш код C++ останется рабочим.

[Правила и синтаксис] [Устоявшаяся практика] [Ключевые слова]


Mike Ang
Mike McCabe

Перевод: Д. Скоробогатов (09.10.2009)
Оригинальный текст: IDL Author's Guide - IDL Best Practices

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2009-10-12 12:30:35

Метки материала: классы XPCOM, язык описаниния интерфейсов, описание интерфейсов, компонент, интерфейс, interface description language, interface, компоненты XPCOM, компонентная объектная модель, IDL, COM, component object model, интерфейсы, XPIDL, XPConnect, XPCOM

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.