インタフェースの継承とライブラリの関係について説明します。
(1) IDL定義の例
次のようにインタフェースAをインタフェースBが継承している場合を考えます。
[ Y.idl ] interface A { .... }; [ Z.idl ] #include "Y.idl" interface B : A { .... };
(2) プログラムの作成
継承元のIDLファイルのIDLコンパイルは、継承がない場合と同様の方法で行います。
IDLc -dy [-C|-cpp|-cobol|-oocob] IDLファイル
継承先のIDLファイルのIDLコンパイルは、-noincludeオプションを指定して行います。
IDLc -dy -noinclude [-C|-cpp|-cobol|-oocob] IDLファイル
それぞれのインタフェースに対して実装部であるライブラリを作成し、またプログラム本体もそれぞれ作成します。
(3) インプリメンテーションリポジトリへの登録
継承元、継承先のアプリケーションをそれぞれ以下のように登録します。
OD_impl_inst -ax Yの定義ファイル
[Yの定義ファイル]
rep_id = YのインプリメンテーションリポジトリID
...
IDL:A:1.0 = Aの実装部ライブラリのパス
...
OD_impl_inst -ax Zの定義ファイル
[Zの定義ファイル]
rep_id = ZのインプリメンテーションリポジトリID
...
IDL:A:1.0 = Aの実装部ライブラリのパス (注1)
IDL:B:1.0 = Bの実装部ライブラリのパス,,IDL:A:1.0 (注2)
...
注1) 継承元インタフェースの定義を記述します。形式は以下のとおりです。
インタフェースリポジトリID=ライブラリパス,[プレフィックス]
注2) 継承先インタフェースの定義を記述します。形式は以下のとおりです。
インタフェースリポジトリID=ライブラリパス,[プレフィックス],継承元インタフェースリポジトリID
継承元のインタフェースが複数ある場合は、インタフェースリポジトリIDをカンマ(“,”)で区切って複数記述します。
IDL:a:1.0 = C:\server\libA.dll,,IDL:b:1.0,IDL:c:1.0 |
IDL:a:1.0 = /usr/prog/liba.so,,IDL:b:1.0,IDL:c:1.0 |
(4) メソッドの呼び出しイメージ
IDL継承機能を用いて作成したライブラリに対するメソッドの呼び出しイメージを以下に示します。