mozilla
Your Search Results

    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 <tt>.idl</tt> (<tt>emb.idl</tt>) a pomocí utility <tt>xpidl.exe</tt> (v Gecko-SDK) se přeloží na binární podobu rozhraní (<tt>.xpt</tt>) a C++ hlavičkový soubor, který bude základem implementace XPCOM komponenty. Více <tt>.xpt</tt> souborů lze sloučit do jednoho pomocí utility <tt>xpt_link.exe</tt>.

    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 <tt>uuidgen.exe</tt> (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: <tt>"@doména/modul/název_komponenty/verze"</tt>. 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

    Document Tags and Contributors

    Contributors to this page: Pawell, Majda
    Last updated by: Pawell,