IDL によるサービスとインターフェースの定義前のページ 準備 にしたがってプロジェクトを作成したら, まずは, サービスとインターフェースを IDL (Interface Definition Language) とよばれる言語で定義します。 OpenOffice.org に含まれているサービスとインターフェースの IDL 定義は,OpenOffice.org SDK に IDL Reference として含まれています。このファイルも参考にしながらサービスとインターフェースを定義していきます。 com.sun.star.demo.Hello サービスまずは,作成する com.sun.star.demo.Hello サービスの設計を行います。
hello プロジェクトの "com.sun.star.demo" パッケージに "Hello.idl" ファイルを作成してください。ただのテキストファイルとして作成します。 そして,作成した "Hello.idl" にサービスの定義を次のように記述します。 #ifndef __com_sun_star_demo_Hello_idl__ #define __com_sun_star_demo_Hello_idl__ #ifndef __com_sun_star_demo_XHello_idl__ #include <com/sun/star/demo/XHello.idl> #endif module com { module sun { module star { module demo { service Hello { interface com::sun::star::demo::XHello; }; };};};}; #endif 順を追って説明していきます。 まずは,最初の二行です。 #ifndef __com_sun_star_demo_Hello_idl__ #define __com_sun_star_demo_Hello_idl__ 一行目でこのサービスを定義したファイルが定義済みかどうかを調べて,定義されていないときは二行目で読み込みます。 ここでは,"_" (アンダースコア) を区切りに使います。 つづく三行です。 #ifndef __com_sun_star_demo_XHello_idl__ #include <com/sun/star/demo/XHello.idl> #endif 今度は,この "com.sun.star.demo.Hello" サービスに含まれるインターフェースのファイルを読み込む部分です。やはり,最初に定義済みかどうかを調べます。そして,定義されていないときには #include ... でファイルを読み込みます。ここでは,サービス名を "<>" でくくって記述します。最後に,#endif で最初の行の #ifndef のブロックを終了します。 そこでは,サービスを定義する本体の部分です。 module com { module sun { module star { module demo { service Hello { interface com::sun::star::demo::XHello; }; };};};}; まず,module com { ... }; のような形式で作成するサービスを入れるモジュールを記述します。ここでは,四つのモジュール com.sun.star.demo が順に入れ子になっています。その demo モジュールの中に Hello サービスを入れます。 型 service サービス名 Hello を宣言します。そして,その中にエクスポートするインターフェースを宣言します。形式は interface ....; の形式です。 service Hello { interface com::sun::star::demo::XHello; }; モジュールを記述したブロックを閉じておきます。括弧の数を間違えないように。 };};};}; 定義の最終行は,最初の行の #ifndef のブロックの開始を終了するものです。 #endif サービス Hello のための IDL ファイルが完成です。 com.sun.star.demo.XHello インターフェースここでは,作成する com.sun.star.demo.XHello インターフェースの設計を行います。インターフェース名は最初に "X" をつけます。com.sun.star.demo まではモジュール名で,インターフェース名は XHello になります。
また, sayHello() メソッドは次のようにします。
string sayHello() com.sun.star.demo.XHello インターフェースは上のように作成していきます。 それでは,com.sun.star.demo パッケージの中に "XHello.idl" ファイルを作成してください。普通のテキストファイルです。 "XHello.idl" ファイルを作成したらつぎのように記述してインターフェースを定義します。 #ifndef __com_sun_star_demo_XHello_idl__ #define __com_sun_star_demo_XHello_idl__ #ifndef __com_sun_star_uno_XInterface_idl__ #include <com/sun/star/uno/XInterface.idl> #endif module com { module sun { module star { module demo { interface XHello: com::sun::star::uno::XInterface { string sayHello(); }; };};};}; #endif インターフェースの定義はサービスの定義と同じようなフォーマットで定義します。 まずは,やはりこの "XHello" インターフェースの IDL ファイルを読み込む記述をします。 #ifndef __com_sun_star_demo_XHello_idl__ #define __com_sun_star_demo_XHello_idl__ 定義済みでなければ読み込みます。 つぎに,ここでインターフェースの定義ファイルを読み込む必要があります。また,Exception の定義ファイルもここで読み込みます。今回はありません。 #ifndef __com_sun_star_uno_XInterface_idl__ #include <com/sun/star/uno/XInterface.idl> #endif ここで読み込んでいる com.sun.star.uno.XInterface.idl はすべてのインターフェースで読み込む必要があります。これは,作成するインターフェースが com.sun.star.uno.XInterface から派生させたものだからです。 つづいて,モジュール com.sun.star.demo の中に新しい "XHello" インターフェースを入れます。 module com { module sun { module star { module demo { interface XHello: com::sun::star::uno::XInterface { string sayHello(); }; };};};}; 次の行では,型,インターフェース名,派生もとのインターフェースを記述しています。形式は下のとおりになります。インターフェースのモジュールの区切りはここでは "::" になっています。 interface XHello: com::sun::star::uno::XInterface インターフェースには,それぞれが持つメソッドを記述します。形式は,戻り値の型 メソッド(引数); となります。 string sayHello(); 最後に入れ子のブロックを閉じておきます。 };};};}; #endif これでインターフェース XHello の IDL ファイルが完成です。保存しておきましょう。 IDE ファイルの完成作成した IDL ファイルは専用のプログラム "idlc" でバイナリ形式のタイプライブラリフォーマットに変換します。このとき,定義ファイルが有効かどうかチェックされます。 つづいて IDL ファイルのコンパイル に進みます。 |