Top > OOoSDK > java > Tutorial > Hello > idl

IDL によるサービスとインターフェースの定義

前のページ 準備 にしたがってプロジェクトを作成したら,

まずは,

サービスとインターフェースを IDL (Interface Definition Language) とよばれる言語で定義します。

OpenOffice.org に含まれているサービスとインターフェースの IDL 定義は,OpenOffice.org SDK に IDL Reference として含まれています。このファイルも参考にしながらサービスとインターフェースを定義していきます。

com.sun.star.demo.Hello サービス

まずは,作成する com.sun.star.demo.Hello サービスの設計を行います。

  1. Hello サービスは com.sun.star.demo モジュールの下に作成する。
  2. com.sun.star.demo.XHello インターフェースを実装する。

hello プロジェクトの "com.sun.star.demo" パッケージに "Hello.idl" ファイルを作成してください。ただのテキストファイルとして作成します。

Hello.idl.png

そして,作成した "Hello.idl" にサービスの定義を次のように記述します。fileHello.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 になります。

  1. com.sun.star.demo モジュールの下に作成する。
  2. com.sun.star.demo.XHello インターフェースはメソッド sayHello() を持つ。

また, sayHello() メソッドは次のようにします。

  1. 文字列 "Hello!" を戻す。戻り値 "Hello!", string 型。引数なし。
string sayHello()

com.sun.star.demo.XHello インターフェースは上のように作成していきます。

それでは,com.sun.star.demo パッケージの中に "XHello.idl" ファイルを作成してください。普通のテキストファイルです。

XHello.idl.png

"XHello.idl" ファイルを作成したらつぎのように記述してインターフェースを定義します。fileXHello.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 ファイルのコンパイル に進みます。


Attach file: fileXHello.idl 511 download [Information] fileXHello.idl.png 306 download [Information] fileHello.idl.png 315 download [Information] fileHello.idl 502 download [Information]

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes