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

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

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

Ключевые слова XPIDL

XPIDL определяет много ключевых слов, некоторые из которых должны быть заключены в квадратные скобки ([]).

Ключевое слово Назначение Пример
interface Декларация интерфейса
interface foo : public nsISupports {
};
attribute Для "свойств" (генерируются геттер и сеттер - методы для получения и установки значений свойства)
inteface foo {
  attribute short bar;
readonly Запрещает изменение свойства. В коде C++ не генерируется сеттер и свойство становится неизменяемым из JavaScript'а.
readonly attribute short myAttribute;
[uuid()] Сопоставляет интерфейсу UUID.

Замечание: UUID'ы должны генерироваться с помощью утилит uuidgen или guidgen. Не занимайтесь копированием / вставкой UUID'ов.

[uuid(00000000-0000-0000-c000-000000000046)]
interface foo {
};
[scriptable] Помечает интерфейс, как доступный для использования в скриптах
[scriptable]
interface foo {
};
const Декларирует константное значение в интерфейсе.
interface foo {
const short bar = 5;
};
[const] Помечает параметр как const
void foo([const] in voidStar bar);
native Используется для декларации нативных типов
native myName(nsFileSpec);
[ptr] Используется для описания типа указателей на значения нативного типа
[ptr] native nsFileSpecPtr(nsFileSpec);
[ref] Используется для описания ссылочного типа в C++ на значения нативного типа
[ref] native nsNativeFileRef(nsFileSpec);
[nsid] Используется для описания nsID, ссылающегося на значения нативного типа Из nsrootidl.idl:
[ref, nsid]   native nsIDRef(nsID);
[retval] Декларирует, что выходной параметр является "возвращаемым значением" для метода. Эта информация может быть использована с помощью подключающих технологий, таких как XPConnect, для того чтобы получать возвращаемое методом значение передавая ему этот возвращаемый параметр.

Единственный способ сопроводить возвращаемое значение другими метками - это использовать комбинацию [retval] с этими метками.

QueryInterface из nsISupports.idl:
interface nsISupports {
  void QueryInterface(in nsIIDRef uuid,
                      [iid_is(uuid),retval] out nsQIResult result);
[...]
};
[shared] Используется для указания того, что этот выходной параметр ссылочного типа не подлежит обычному применению правил учета принадлежности.
[iid_is] Используется для указания того, что какие-то другие параметры указывают (во время выполнения) тип интерфейса для данного выходного параметра. Вам практически никогда это не понадобится. QueryInterface из nsISupports.idl:
interface nsISupports {
  void QueryInterface(in nsIIDRef uuid, 
                       [iid_is(uuid),retval] out nsQIResult result);
  [...]
};
[notxpcom] Указывает, что этот метод не возвращает значений типа nsresult. При использовании этой пометки предполагается, что вы отказываетесь от правил XPCOM. Поэтому не следует использовать эту метку. AddRef и Release из nsISupports.idl:
interface nsISupports {
  [...]
  [noscript, notxpcom] nsrefcnt AddRef();
  [noscript, notxpcom] nsrefcnt Release();
};
[noscript] Помечает метод как недоступный для использования в скриптах. Это должно использоваться в случаях, когда методы не должны быть доступны для использования в скриптах (например, при использовании нативных типов), хотя интерфейс в целом помечен как scriptable.
in Помечает "входной" параметр.
out Помечает "выходной" параметр.
inout Помечает "входной и выходной" параметр.
%{C++
%}
Текст, заключенный в ограничители %{C++ %}, копируется непосредственно в заголовочный файл C++. Начальная "%{C++" и конечная "%}" по­сле­до­ва­тель­но­сти должны находиться каждая в начале отдельной строки.
%{C++
// Этот текст будет скопирован в генерируемый файл .h
%}

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


Mike Ang

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

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

Последнее редактирование: 2009-10-22 19:11:04

Метки материала: ключевые слова, кейворды, метка, языки программирования, синтаксис, правила, заголовочный файл, language, описание интерфейсов, язык описаниния интерфейсов, компонент, метки, интерфейс, syntax, interface description language, interface, IDL, XPIDL, XPCOM

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

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

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


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