We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

XPIDL

XPIDL (Cross-Platform Interface Definition Language) je jazyk pro definici rozhraní (interface) mezi C++ komponentou (tedy XPCOMem) a JavaScriptem, pomocí kterého přistupujeme ke GUI embedded aplikace.

Pokud postupujeme při tvorbě aplikace od shora dolů (analyticky), navržení rozhraní je první věcí, kterou uděláme. XPIDL má C++-like syntaxi, jeho menší nevýhodou je, že nepodporuje vícenásobné dědění a přetěžování metod.

Příklad definice rozhraní:

#include "nsISupports.idl"
[scriptable, uuid(d6266d60-abe6-11d8-b2ec-c92440c3e078)]
interface EmbListener : nsISupports {
  void connectionOpened(in PRBool someBool);
};

Tento kus kódu se uloží do souboru s příponou .idl (emb.idl) a pomocí utility xpidl.exe (v Gecko-SDK) se přeloží na binární podobu rozhraní (.xpt) a C++ hlavičkový soubor, který bude základem implementace XPCOM komponenty. Více .xpt souborů lze sloučit do jednoho pomocí utility xpt_link.exe.

Po "includování" potřebných rozhraní následuje řádka, která oznamuje, že k rozhraní se přistupuje pomocí skriptů a UUID (viz následující odstavec). Potom je uvedena vlastní definice rozhraní s exportovanými metodami a proměnnými.

Identifikace XPCOM objektu

Každému rozhraní (tedy XPCOM objektu) je přiřazeno jednoznačné ID generované např. utilitou uuidgen.exe (MS-Visual Studio), nazývá se Universally Unique IDentifier (UUID) a má 128 bitů. V žargonu Mozilly se častěji setkáváme s označením IID tj. UUID rozhraní a CID tj. UUID třídy nebo komponenty.

Dále se používá contract ID – textový identifikátor komponenty nebo třídy. Jeho tvar "generuje" programátor a může být jakýkoliv. Doporučený tvar je však: "@doména/modul/název_komponenty/verze". Uvádí se až ve zdrojáku komponenty a uplatňuje se při inicializaci komponenty (při startu embedded aplikace).

Informace o původním dokumentu

  • Autor: Jan Ditrich

Štítky a přispěvatelé do dokumentace

Přispěvatelé této stránky: SphinxKnight, Pawell, Majda
Poslední aktualizace od: SphinxKnight,