(57)【要約】【課題】ソフトウェアのモジュールのインタフェースを接続可能なポインタの固有名称が煩雑にならないソフトウェアのプラグイン方法を提供する。【解決手段】モジュールＭ１乃至Ｍ４が有するエントリインタフェースＩｅ１乃至Ｉｅ４のエントリ名をフレームワーク２が登録し、フレームワーク２がエントリ名に基づいてエントリインタフェースＩｅ１を呼び出すことによりモジュールＭ１が有するオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔのオペレーション名を取得し、フレームワーク２がオペレーション名に基づいてオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを呼び出し、モジュールＭ１はフレームワーク２に接続する自身Ｍ１の生成、モジュールＭ１の固有の処理と、フレームワーク２に接続する自身Ｍ１の削除を実施する。【選択図】図８
2006309621.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのモジュールが有するエントリインタフェースのエントリ名をフレームワークが登録し、
前記フレームワークが前記エントリ名に基づいて前記エントリインタフェースを呼び出すことにより、前記フレームワークが前記オペレーション名に基づいて前記オペレーションインタフェースを呼び出し、
前記モジュールは前記フレームワークに接続する自身の生成、前記モジュールの固有の処理と、前記フレームワークに接続する自身の削除を実施することを特徴とするソフトウェアのプラグイン方法。
【請求項２】
前記モジュールが複数である場合に、一の前記モジュールの自身の削除の後に、他の前記モジュールの前記エントリインタフェースを呼び出すことを特徴とする請求項１に記載のソフトウェアのプラグイン方法。
【請求項３】
前記モジュールが複数である場合に、複数の前記モジュールの前記オペレーション名が同一であることを特徴とする請求項１または請求項２に記載のソフトウェアのプラグイン方法。
【請求項４】
前記オペレーションインタフェースの呼び出しにおいて、
前記フレームワークは前記オペレーションインタフェースとして、オープンインタフェース、トランスレイトデータインタフェース、プロパティインタフェースとクローズインタフェースを呼び出し、
前記生成、処理と削除において、
前記モジュールは前記オープンインタフェースによって前記フレームワークに接続し、
前記モジュールは前記トランスレイトデータインタフェースと前記プロパティインタフェースによって前記モジュールの固有の処理を実施し、
前記モジュールは前記クローズインタフェースによって前記フレームワークとの接続を解消することを特徴とする請求項１乃至３のいずれか１項に記載のソフトウェアのプラグイン方法。
【請求項５】
エントリインタフェースとオペレーションインタフェースを有するソフトウェアのモジュールと、
前記エントリインタフェースのエントリ名を登録し、前記エントリ名に基づいて前記エントリインタフェースを呼び出すことにより、前記オペレーション名に基づいて前記オペレーションインタフェースを呼び出すフレームワークとを有し、
前記オペレーションインタフェースの呼び出しにより、前記モジュールが前記フレームワークに接続する自身の生成、前記モジュールの固有の処理と、前記フレームワークに接続する自身の削除を実施することを特徴とするアプリケーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのプラグイン方法、および、プラグインされたソフトウェアを有するアプリケーションシステムに関する。
【背景技術】
【０００２】
従来、アプリケーションシステムにソフトウェアをプラグインする場合、プラグインするソフトウェアをモジュール化し、このモジュールをインタフェースを介してアプリケーションシステムに接続していた（例えば、特許文献１参照。）。インタフェースは、それぞれのモジュールで個別に定義するか、モジュールの機能に応じて共通化していた。しかし、共通化したとしても、モジュールの大型化、多機能化により、個々のモジュールでも複数のインタフェースが必要となっている。このことにより、複数のモジュールで一つの共通化したインタフェースに接続することが可能になるので、複数のモジュールそれぞれの接続可能なポインタに、モジュールの区別とインタフェースの区別の両方が可能な固有名称を付けている。固有名称を付けることにより、モジュールに必要なインタフェースを接続できるが、固有名称の個数は多くなり煩雑になっている。
【特許文献１】特開２００３−１０８３７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明は、モジュールのインタフェースを接続可能なポインタの固有名称が煩雑にならないソフトウェアのプラグイン方法を提供する。
【０００４】
また、本発明は、モジュールのインタフェースを接続可能なポインタの固有名称が煩雑にならないアプリケーションシステムを提供する。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、ソフトウェアのモジュールが有するエントリインタフェースのエントリ名をフレームワークが登録し、フレームワークがエントリ名に基づいてエントリインタフェースを呼び出すことにより、フレームワークがオペレーション名に基づいてオペレーションインタフェースを呼び出し、モジュールはフレームワークに接続する自身の生成、モジュールの固有の処理と、フレームワークに接続する自身の削除を実施することを特徴とするソフトウェアのプラグイン方法が提供される。
【０００６】
また、本願発明の一態様によれば、エントリインタフェースとオペレーションインタフェースを有するソフトウェアのモジュールと、エントリインタフェースのエントリ名を登録し、エントリ名に基づいてエントリインタフェースを呼び出すことによりオペレーション名に基づいてオペレーションインタフェースを呼び出すフレームワークとを有し、オペレーションインタフェースの呼び出しによりモジュールがフレームワークに接続する自身の生成、モジュールの固有の処理と、フレームワークに接続する自身の削除を実施することを特徴とするアプリケーションシステムが提供される。
【発明の効果】
【０００７】
本発明の一態様に係るソフトウェアのプラグイン方法およびアプリケーションシステムによれば、モジュールのインタフェースを接続可能なポインタの固有名称が煩雑にならないソフトウェアのプラグイン方法を提供できる。また、モジュールのインタフェースを接続可能なポインタの固有名称が煩雑にならないアプリケーションシステムを提供できる。
【発明を実施するための最良の形態】
【０００８】
次に、図面を参照して、本発明の実施の形態について説明する。なお、以下では本発明の実施形態を図面に基づいて説明するが、図解のためだけであり、本発明はそれらの図面に限定されるものではない。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。また、図面は模式的なものであり、厚みと平面寸法との関係、各層の厚みの比率等は現実のものとは異なることに留意すべきである。
【実施例１】
【０００９】
図１に示すように、アプリケーションシステム１は、フレームワーク２と、複数のソフトウェアのモジュールＭ１乃至Ｍ４を有している。フレームワーク２は、登録部１４、宣言部３、取得部４、処理部５とモジュールライブラリ１０を有している。処理部５は、生成部６、削除部７、シーケンス部８と設定部９を有している。
【００１０】
モジュールＭ１乃至Ｍ４は、オープンインタフェースＩｏ、クローズインタフェースＩｃ、エントリインタフェースＩｅ１乃至Ｉｅ４、プロパティインタフェースＩｐとトランスレイトデータインタフェースＩｔを有している。
【００１１】
図２に示すように、モジュールＭ１は、インタフェース層１１とコア層１２配置された階層構造を有している。インタフェース層１１は、階層構造の最上層でコア層１２の上層に配置されている。インタフェース層１１には、オープンインタフェースＩｏ、クローズインタフェースＩｃ、エントリインタフェースＩｅ１、プロパティインタフェースＩｐとトランスレイトデータインタフェースＩｔが配置されている。コア層１２には、モジュールＭ１として機能するソフトウェアであるミドルウェアコア１３が配置されている。エントリインタフェースＩｅ１は、フレームワーク２がエントリインタフェースＩｅ１を識別するための固有名称である関数ポインタM1_QueryInterface()を有している。オープンインタフェースＩｏは、エントリインタフェースＩｅ１がモジュールＭ１に接続可能なオペレーションインタフェースの中からオープンインタフェースＩｏを識別するための関数ポインタOpen()を有している。プロパティインタフェースＩｐは、エントリインタフェースＩｅ１がモジュールＭ１に接続可能なオペレーションインタフェースの中からプロパティインタフェースＩｐを識別するための関数ポインタProperty()を有している。トランスレイトデータインタフェースＩｔは、エントリインタフェースＩｅ１がモジュールＭ１に接続可能なオペレーションインタフェースの中からトランスレイトデータインタフェースＩｔを識別するための関数ポインタTranslateData()を有している。クローズインタフェースＩｃは、エントリインタフェースＩｅ１がモジュールＭ１に接続可能なオペレーションインタフェースの中からクローズインタフェースＩｃを識別するための関数ポインタClose()を有している。
【００１２】
モジュールＭ２乃至Ｍ４もモジュールＭ１と同様の階層構造を有しているが、エントリインタフェースＩｅ２乃至Ｉｅ４のエントリ名である関数ポインタM2_QueryInterface()乃至M4_QueryInterface()が、エントリインタフェースＩｅ１の関数ポインタM1_QueryInterface()とは異なっている。なお、モジュールＭ１乃至Ｍ４が換わっても、関数ポインタProperty()、Open()、Close()、TranslateData()は換わらず、同じ関数ポインタProperty()、Open()、Close()、TranslateData()を設定する。
【００１３】
図３に示すように、エントリインタフェースＩｅ１乃至Ｉｅ４の関数ポインタM1_QueryInterface()乃至M4_QueryInterface()は、MXXX_QueryInterface()のように、MXXXにおいてモジュールＭ１乃至Ｍ４が識別可能である。このことにより、フレームワーク２は、個々のモジュールＭ１乃至Ｍ４を選択できるモジュールエントリアドレスとして、関数ポインタMXXX_QueryInterface()を用いることができる。そして、エントリインタフェースＩｅ１乃至Ｉｅ４は、エントリインタフェースＩｅ１乃至Ｉｅ４が属するモジュールＭ１乃至Ｍ４が有するオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔをフレームワーク２に取得させることができる。エントリインタフェースＩｅ１乃至Ｉｅ４を経由してのオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを取得するためには、フレームワーク２は個々のモジュールＭ１乃至Ｍ４でオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを識別できればよく、モジュールＭ１乃至Ｍ４間で共通の関数ポインタOpen()、Close()、Property()、TranslateData()を用いることができる。
【００１４】
図４に示すように、モジュールＭ１等は、ブロック図により把握することもできる。図３と図４より、オペレーションインタフェースであるプロパティインタフェースＩｐにより、フレームワーク２は、モジュールＭ１乃至Ｍ４からプロパティと各種情報（Parameter）を取得できる。また、プロパティインタフェースＩｐにより、フレームワーク２は、モジュールＭ１乃至Ｍ４にプロパティと各種情報を設定できる。オペレーションインタフェースであるオープンインタフェースＩｏにより、フレームワーク２はモジュールＭ１乃至Ｍ４を初期化（Initialization）できる。さらに、モジュールＭ１乃至Ｍ４をフレームワーク２にオープンさせることができる。このことにより、モジュールＭ１乃至Ｍ４の実体をフレームワーク２に生成することができる。
【００１５】
オペレーションインタフェースであるトランスレイトデータインタフェースＩｔにより、フレームワーク２は、モジュールＭ１乃至Ｍ４にデータ変換をさせることができる。図４に示すように、フレームワーク２がモジュールＭ１に入力データInput dataを入力する。モジュールＭ１は入力データInput dataをデータ変換して出力データOutput dataを生成する。フレームワーク２がモジュールＭ１から出力データOutput dataを出力する。このように、モジュールＭ１等は、図５に示すような各種情報（Parameter）に基づいて入力データInput dataをデータ変換した出力データOutput dataを出力する一般的なデータ変換モジュールの機能を備えていると考えられる。
【００１６】
図３と図４より、オペレーションインタフェースであるクローズインタフェースＩｃにより、フレームワーク２はいわゆるプラグインの終了処理(End)として、モジュールＭ１乃至Ｍ４をフレームワーク２に対してクローズさせることができる。このことにより、モジュールＭ１乃至Ｍ４の実体をフレームワーク２から削除することができる。
【００１７】
次に、図１のアプリケーションシステム１によるソフトウェアのプラグイン方法について説明する。例として、モジュールＭ１に組まれたソフトウェアをフレームワーク２にプラグインし、次に、モジュールＭ２に組まれたソフトウェアをフレームワーク２にプラグインする場合について説明する。図６に示すように、ソフトウェアのプラグイン方法では、まず、ステップＳ１で、図１の登録部１４が、モジュールライブラリ１０に基づいて、ソフトウェアのモジュールＭ１が有するエントリインタフェースＩｅ１のエントリ名である関数ポインタM1_QueryInterface()をフレームワーク２が登録する。フレームワーク２は関数ポインタM1_QueryInterface()から関数で表現されたエントリインタフェースＩｅ１を呼び出しオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの取得が可能になる。
【００１８】
ステップＳ２で、宣言部３が、モジュールＭ１のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの関数ポインタ型を図６のＣによる関数ポインタ型宣言例に示すように宣言する。なお、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔそれぞれが行う入出力の処理もいわゆる関数であると考えられるので、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔそれぞれが対応する関数ＣｏｄｅｃＯｐｅｎ、ＣｏｄｅｃＣｌｏｓｅ、ＣｏｄｅｃＰｒｏｐｅｒｔｙ、ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａを宣言し定義している。これらの宣言により、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔ毎に、フレームワーク２がどのような出力データを出力し、どのような入力データを入力するか明確になり、図７に示すように、フレームワーク２にインタフェースＩｅ１、Ｉｏ、Ｉｃ、Ｉｐ、Ｉｔの接続準備ができたことになる。
【００１９】
ステップＳ３で、取得部４が、エントリインタフェースＩｅ１の関数ポインタM1_QueryInterface()に基づいてエントリインタフェースＩｅ１を呼び出す。この呼び出しにより、モジュールＭ１が有するオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔのオペレーション名である関数ポインタOpen()、Close()、Property()、TranslateData()をフレームワーク２が取得する。この取得により、フレームワーク２が関数ポインタOpen()、Close()、Property()、TranslateData()に基づいてオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを呼び出す。図８に示すように、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔがフレームワーク２に接続することにより、モジュールＭ１とフレームワーク２は接続され、フレームワーク２の制御により、モジュールＭ１のソフトウェアを実施することができるようになる。なお、図６のＣによるオペレーションインタフェースの関数ポインタの取得例によれば、エントリインタフェースの関数query_interface()にオペレーション名である引数Open、Close、Property、TranslateDataを格納すれば、関数ＣｏｄｅｃＯｐｅｎ、ＣｏｄｅｃＣｌｏｓｅ、ＣｏｄｅｃＰｒｏｐｅｒｔｙ、ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａをフレームワーク２は取得することができる。
【００２０】
ステップＳ４で、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを用いて、処理部５がモジュールＭ１のソフトウェアを実行処理する。処理部５からの制御により、モジュールＭ１はフレームワーク２に接続するモジュールＭ１自身の生成、モジュールＭ１の固有の処理と、フレームワーク２に接続するモジュールＭ１自身の削除を実施する。ステップＳ４をより詳細に説明する。
【００２１】
図５に示すように、まず、ステップＳ１１で、図１のシーケンス部８がパラメータとステータスの受け渡しを行うか判定する。受け渡しを行わない場合はステップＳ１３に進む。受け渡しを行う場合はステップＳ１２に進む。
【００２２】
ステップＳ１２で、図１の設定部９がオープンインタフェースＩｏによる実行処理に先立って、プロパティインタフェースＩｐを制御して、設定部９はモジュールＭ１のソフトウェアのパラメータとステータスを取得し設定することにより、後に行われるオープンの処理を可能にする。設定部９は関数ポインタProperty()に基づいて呼び出された関数、例えば図６のオペレーションインタフェースを用いた処理の例の関数ＣｏｄｅｃＰｒｏｐｅｒｔｙ（ＮＵＬＬ，“Ｃ３”，ｓｔｒ）・・・を実施する。
【００２３】
ステップＳ１３で、図１の生成部６が関数ポインタOpen()によって関数ＣｏｄｅｃＯｐｅｎを呼び出し、モジュールＭ１をオープンインタフェースＩｏによって、初期化し、フレームワーク２に対してオープンし実体化させる。この実体化によってモジュールＭ１がフレームワーク２にいわゆるプラグインされた状態、すなわち、モジュールＭ１内のソフトウェアがフレームワーク２によって制御可能な状態になる。
【００２４】
ステップＳ１４で、シーケンス部８がパラメータとステータスの受け渡しを行うか判定する。受け渡しを行わない場合はステップＳ１６に進む。受け渡しを行う場合はステップＳ１５に進む。
【００２５】
ステップＳ１５で、設定部９がオープンインタフェースＩｏによる実行処理に先立って、プロパティインタフェースＩｐを制御して、設定部９はモジュールＭ１のソフトウェアのパラメータを取得し、設定することにより、後に行われるトランスレイトデータの処理を可能にする。なお、図６のオペレーションインタフェースを用いた処理の例では、関数ＣｏｄｅｃＯｐｅｎと関数ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａの実施の間には、関数ＣｏｄｅｃＰｒｏｐｅｒｔｙは実行されていない。
【００２６】
ステップＳ１６で、処理部５が関数ポインタTranslateData()によって関数ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａを呼び出し、モジュールＭ１にトランスレイトデータインタフェースを介してモジュールＭ１のソフトウェアの固有の処理、例えば、入力されたデータを変換して出力させる。
【００２７】
ステップＳ１７で、シーケンス部８が、モジュールＭ１のソフトウェアで処理すべきデータがフレームワーク２に残っているか判定する。残っていればステップＳ１６に戻り、残っていなければステップＳ１８に進む。
【００２８】
ステップＳ１８で、シーケンス部８がパラメータとステータスの受け渡しを行うか判定する。受け渡しを行わない場合はステップＳ２０に進む。受け渡しを行う場合はステップＳ１９に進む。
【００２９】
ステップＳ１９で、設定部９がクローズインタフェースＩｏによる実行処理に先立って、プロパティインタフェースＩｐを制御して、設定部９はモジュールＭ１のソフトウェアのパラメータとステータスを取得し設定することにより、後に行われるクローズの処理を可能にする。なお、図６のオペレーションインタフェースを用いた処理の例では、関数ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａと関数ＣｏｄｅｃＣｌｏｓｅの実施の間には、関数ＣｏｄｅｃＰｒｏｐｅｒｔｙ（ｈａｎｄｌｅ，“Ｃ３００”，ｓｔｒ）・・・が実行されている。なお、ステップＳ１２、Ｓ１５、Ｓ１９に限らず、必要なパラメータの設定やステータスの取得(Property（）)はいつ行ってもよい。
【００３０】
ステップＳ２０で、削除部７が終了処理として、関数ポインタClose()によって関数ＣｏｄｅｃＣｌｏｓｅを呼び出し、モジュールＭ１をクローズインタフェースＩｃによって、フレームワーク２との接続を解消し、モジュールＭ１をフレームワーク２に対してクローズし、フレームワーク２に対して実体化したモジュールＭ１を図８に対して図１に示すように削除する。この削除によってモジュールＭ１がフレームワーク２のプラグインされた状態が解消される。以上で、図６のステップＳ４が終了する。
【００３１】
図６のステップＳ５で、シーケンス部８が、図１のアプリケーションシステム１としての機能を達成するためのシーケンスを終了したか否か判定する。終了していなければステップＳ１に戻り、終了していればプラグイン方法を終了する。ここで、図１のアプリケーションシステム１としての機能を達成するためのシーケンスが、モジュールＭ１のソフトウェアの次に、モジュールＭ２のソフトウェアを実行するシーケンスであるとする。
【００３２】
図１０に示すように、図７のモジュールＭ１の場合と同様にフレームワーク２にインタフェースＩｅ２、Ｉｏ、Ｉｃ、Ｉｐ、Ｉｔの接続準備がされることになる。
【００３３】
図６のステップＳ１で、モジュールライブラリ１０に基づいて、ソフトウェアのモジュールＭ２が有するエントリインタフェースＩｅ２のエントリ名である関数ポインタM2_QueryInterface()をフレームワーク２が登録する。フレームワーク２は関数ポインタM2_QueryInterface()から関数で表現されたエントリインタフェースＩｅ２を呼び出しモジュールＭ２のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの取得が可能になる。
【００３４】
ステップＳ２で、モジュールＭ２のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの関数ポインタ型を宣言する。オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔそれぞれが対応する関数ＣｏｄｅｃＯｐｅｎ、ＣｏｄｅｃＣｌｏｓｅ、ＣｏｄｅｃＰｒｏｐｅｒｔｙ、ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａを宣言し定義している。
【００３５】
さらに、図１１に示すように、図８のモジュールＭ１の場合と同様にフレームワーク２にインタフェースＩｅ２、Ｉｏ、Ｉｃ、Ｉｐ、Ｉｔの接続されることになる。
【００３６】
図６のステップＳ３で、エントリインタフェースＩｅ２の関数ポインタM2_QueryInterface()に基づいてエントリインタフェースＩｅ２を呼び出す。この呼び出しにより、モジュールＭ２が有するオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔのオペレーション名である関数ポインタOpen()、Close()、Property()、TranslateData()をフレームワーク２が取得する。この取得により、フレームワーク２が関数ポインタOpen()、Close()、Property()、TranslateData()に基づいてモジュールＭ２のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを呼び出す。オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔがフレームワーク２に接続することにより、モジュールＭ２とフレームワーク２は接続され、フレームワーク２の制御により、モジュールＭ２のソフトウェアを実施することができるようになる。
【００３７】
ステップＳ４で、モジュールＭ２のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを用いて、モジュールＭ２のソフトウェアを実行処理する。モジュールＭ２はフレームワーク２に接続するモジュールＭ２自身の生成、モジュールＭ２の固有の処理と、フレームワーク２に接続するモジュールＭ２自身の削除を実施する。
【００３８】
このように、図１のアプリケーションシステム１としての機能を達成するためのシーケンスとしての、モジュールＭ１のソフトウェアの次にモジュールＭ２のソフトウェアを実行するというシーケンスをフレームワーク２は実行することができる。このことから、図１のアプリケーションシステム１としての機能を達成するために必要なソフトウェアのモジュールＭ１乃至Ｍ４と、それらのモジュールＭ１乃至Ｍ４のソフトウェアの処理の順番とソフトウェア間のデータの受け渡しの取り決めであるシーケンスを用意することにより、図１２に示すように、フレームワーク２は、シーケンスのモジュールＭ１乃至Ｍ４のソフトウェアの処理の順番に、モジュールＭ１乃至Ｍ４に対して一連の実体化、固有の処理と削除を動的に実行することができる。すなわち、シーケンスに応じて、モジュールＭ１乃至Ｍ４を順次変更して、一連の実体化、固有の処理と削除を繰り返し実行できる。このことにより、アプリケーションシステム１は、アプリケーションシステム１としての機能を達成することができる。なお、モジュールＭ１乃至Ｍ４は順次呼び出されて、実体化、固有の処理と削除が実施されるので、シーケンスによる処理順が前のモジュールの削除の後に、次のモジュールのエントリインタフェースが呼び出され実体化されることになる。
【００３９】
そして、モジュールＭ１乃至Ｍ４のエントリインタフェースＩｅ１乃至Ｉｅ４の識別名M1_QueryInterface()乃至M4_QueryInterface()は、モジュールＭ１乃至Ｍ４毎に異なる。しかし、モジュールＭ１乃至Ｍ４のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの識別名Open()、Close()、Property()、TranslateData()は、モジュールＭ１乃至Ｍ４毎に異ならず、同一である。このようにオペレーションインタフェースの識別名を統一することで、モジュールライブラリ１０はオペレーションインタフェースによって煩雑になることがない。また、インタフェースの取得も図６と図９のフローチャートのように共通化でき、理解しやすく使用しやすいものになる。これは、４個のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔに対して1つのエントリインタフェースＩｅ１乃至Ｉｅ４で対応が可能だからである。１つのモジュールＭ１乃至Ｍ４で１つのエントリインタフェースＩｅ１乃至Ｉｅ４を持つのみなので、モジュールＭ１乃至Ｍ４として明確化し扱いやすい。また、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、ＩｔをモジュールＭ１乃至Ｍ４間で共通化しているので、全く同じインタフェース名Open()、Close()、Property()、TranslateData()でライブラリ１０に登録しておくことができるため、理解しやすく使用しやすい。エントリインタフェースＩｅ１乃至Ｉｅ４とオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔは、モジュールＭ１乃至Ｍ４単位で任意に定義することが可能である。エントリインタフェースＩｅ１乃至Ｉｅ４とオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔは、動的に取得することができるため、必要なインタフェースＩｅ１乃至Ｉｅ４とＩｏ、Ｉｃ、Ｉｐ、Ｉｔのみを取得することができ、モジュールＭ１乃至Ｍ４の切り替えを容易に行うことができる。
【実施例２】
【００４０】
図１３と図１４に示すように、実施例２に係るソフトウェアのプラグイン方法は、図７と図８の実施例１のプラグイン方法と比較して、複数のモジュールＭ１乃至Ｍ４が同時にフレームワーク２に接続する点が異なっている。言い方を換えると、モジュールＭ１乃至Ｍ４とフレームワーク２との接続に関して、実施例１のプラグイン方法では、モジュールＭ１乃至Ｍ４同士が置き換わったり切り替わったりしてモジュールＭ１乃至Ｍ４とフレームワーク２との間の接続が動的であるのに対して、実施例２のプラグイン方法では、モジュールＭ１乃至Ｍ４同士が置き換わる必要がなくモジュールＭ１乃至Ｍ４とフレームワーク２との間の接続が静的である点が異なっている。
【００４１】
図６のステップＳ１で、図１のモジュールライブラリ１０とシーケンス部８の有するシーケンスに基づいて、アプリケーションシステム１の機能を実現するために必要な複数のソフトウェアのそれぞれのモジュールＭ１乃至Ｍ４が有するエントリインタフェースＩｅ１乃至Ｉｅ４のエントリ名である関数ポインタM1_QueryInterface()乃至M4_QueryInterface()をフレームワーク２が登録する。図１３に示すように、フレームワーク２は関数ポインタM1_QueryInterface()乃至M4_QueryInterface()から関数で表現されたエントリインタフェースＩｅ１乃至Ｉｅ４を呼び出しモジュールＭ１乃至Ｍ４それぞれのオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの取得が可能になる。
【００４２】
ステップＳ２で、モジュールＭ１乃至Ｍ４それぞれのオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの関数ポインタ型を宣言する。モジュールＭ１乃至Ｍ４毎に、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔそれぞれが対応する関数ＣｏｄｅｃＯｐｅｎ、ＣｏｄｅｃＣｌｏｓｅ、ＣｏｄｅｃＰｒｏｐｅｒｔｙ、ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａを宣言し定義する。
【００４３】
ステップＳ３で、エントリインタフェースＩｅ１乃至Ｉｅ４の関数ポインタM1_QueryInterface()乃至M4_QueryInterface()に基づいてエントリインタフェースＩｅ１乃至Ｉｅ４を呼び出す。この呼び出しにより、モジュールＭ１乃至Ｍ４それぞれが有するオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔのオペレーション名である関数ポインタOpen()、Close()、Property()、TranslateData()をフレームワーク２が取得する。この取得により、フレームワーク２が関数ポインタOpen()、Close()、Property()、TranslateData()に基づいてモジュールＭ２のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを呼び出す。図１４に示すように、モジュールＭ１乃至Ｍ４それぞれのオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔがフレームワーク２に接続することにより、モジュールＭ１乃至Ｍ４それぞれとフレームワーク２は接続され、フレームワーク２の制御により、モジュールＭ１乃至Ｍ４それぞれのソフトウェアを実施することができるようになる。
【００４４】
ステップＳ４で、モジュールＭ１乃至Ｍ４それぞれのオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを用いて、シーケンス部のシーケンスにしたがいモジュールＭ１乃至Ｍ４それぞれのソフトウェアを実行処理する。モジュールＭ１乃至Ｍ４それぞれはフレームワーク２に接続するモジュールＭ１乃至Ｍ４自身の生成、モジュールＭ１乃至Ｍ４の固有の処理と、フレームワーク２に接続するモジュールＭ１乃至Ｍ４自身の削除を実施する。なお、シーケンスによっては、フレームワーク２に接続するモジュールＭ１乃至Ｍ４自身の削除の実施は省略することができる。これは、実施例１のようにモジュールＭ１乃至Ｍ４間でフレームワーク２との接続を切り換える必要が無いからである。
【００４５】
このように、実施例２のプラグイン方法でも、図１のアプリケーションシステム１としての機能を達成するように、シーケンスにしたがい、モジュールＭ１乃至Ｍ４のソフトウェアを実行することができる。
【００４６】
そして、実施例２においても、実施例１と同様に、モジュールＭ１乃至Ｍ４それぞれのエントリインタフェースＩｅ１乃至Ｉｅ４の識別名M1_QueryInterface()乃至M4_QueryInterface()は、モジュールＭ１乃至Ｍ４毎に異なる。また、モジュールＭ１乃至Ｍ４それぞれのオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの識別名Open()、Close()、Property()、TranslateData()は、モジュールＭ１乃至Ｍ４毎に異ならず、同一である。このようにオペレーションインタフェースの識別名を統一することで、モジュールライブラリ１０はオペレーションインタフェースによって煩雑になることがない。
【実施例３】
【００４７】
図１５に示すように、実施例３は、実施例１と２のアプリケーションシステム１を、音再生装置に適用した場合である。プレーヤ２は実施例１と２のフレームワーク２に対応する。デマルチプレクサＭ１は実施例１と２のソフトウェアのモジュールＭ１に対応する。ＷＭＡデコーダＭ２は実施例１と２のソフトウェアのモジュールＭ２に対応する。オーディオドライバＭ３は実施例１と２のソフトウェアのモジュールＭ３に対応する。ＡＡＣデコーダＭ４は実施例１と２のソフトウェアのモジュールＭ４に対応する。
【００４８】
デマルチプレクサＭ１、ＷＭＡデコーダＭ２、オーディオドライバＭ３とＡＡＣデコーダＭ４はそれぞれ、オープンインタフェースＩｏ、クローズインタフェースＩｃ、エントリインタフェースＩｅ１乃至Ｉｅ４、プロパティインタフェースＩｐとトランスレイトデータインタフェースＩｔを有している。
【００４９】
図１６に示すように、デマルチプレクサＭ１は、図２の実施例１と同様にインタフェース層１１とコア層１２配置された階層構造を有している。インタフェース層１１は、階層構造の最上層でコア層１２の上層に配置されている。インタフェース層１１には、オープンインタフェースＩｏ、クローズインタフェースＩｃ、エントリインタフェースＩｅ１、プロパティインタフェースＩｐとトランスレイトデータインタフェースＩｔが配置されている。コア層１２には、デマルチプレクサＭ１として機能するソフトウェアである取得した音楽コンテンツの情報解析と圧縮データの分離を行うコアＩＰ（１３）が配置されている。エントリインタフェースＩｅ１は、フレームワーク２がエントリインタフェースＩｅ１を識別するための固有名称である関数ポインタDemulti_QueryInterface()を有している。オープンインタフェースＩｏは、エントリインタフェースＩｅ１がデマルチプレクサＭ１に接続可能なオペレーションインタフェースの中からオープンインタフェースＩｏを識別するための関数ポインタOpen()を有している。プロパティインタフェースＩｐは、エントリインタフェースＩｅ１がデマルチプレクサＭ１に接続可能なオペレーションインタフェースの中からプロパティインタフェースＩｐを識別するための関数ポインタProperty()を有している。トランスレイトデータインタフェースＩｔは、エントリインタフェースＩｅ１がデマルチプレクサＭ１に接続可能なオペレーションインタフェースの中からトランスレイトデータインタフェースＩｔを識別するための関数ポインタTranslateData()を有している。クローズインタフェースＩｃは、エントリインタフェースＩｅ１がデマルチプレクサＭ１に接続可能なオペレーションインタフェースの中からクローズインタフェースＩｃを識別するための関数ポインタClose()を有している。
【００５０】
図１７に示すように、ＷＭＡデコーダＭ２もデマルチプレクサＭ１と同様の階層構造を有しているが、エントリインタフェースＩｅ２のエントリ名である関数ポインタWMADecoder_QueryInterface()が、エントリインタフェースＩｅ１の関数ポインタDemulti_QueryInterface()とは異なっている。コア層１２には、ＷＭＡデコーダＭ２として機能するソフトウェアであるＡＡＣ圧縮データをＰＣＭデータに伸張するコアＩＰ（１３）が配置されている。
【００５１】
図１８に示すように、オーディオドライバＭ３もデマルチプレクサＭ１と同様の階層構造を有しているが、エントリインタフェースＩｅ３のエントリ名である関数ポインタDriver_QueryInterface()が、エントリインタフェースＩｅ１の関数ポインタDemulti_QueryInterface()とは異なっている。コア層１２には、オーディオドライバＭ３として機能するソフトウェアであるＰＭＣデータをスピーカに出力するコアＩＰ（１３）が配置されている。
【００５２】
図１９に示すように、ＡＡＣデコーダＭ４もデマルチプレクサＭ１と同様の階層構造を有しているが、エントリインタフェースＩｅ４のエントリ名である関数ポインタAACDecoder_QueryInterface()が、エントリインタフェースＩｅ１の関数ポインタDemulti_QueryInterface()とは異なっている。コア層１２には、ＡＡＣデコーダＭ４として機能するソフトウェアであるＡＡＣ圧縮データをＰＣＭデータに伸張するコアＩＰ（１３）が配置されている。
【００５３】
なお、図１６乃至図１９のモジュールＭ１乃至Ｍ４が換わっても、関数ポインタProperty()、Open()、Close()、TranslateData()は換わらず、同じ関数ポインタProperty()、Open()、Close()、TranslateData()を設定する。
【００５４】
実施例３のアプリケーションシステム１でも、実施例２で説明したのと同様に、複数のモジュールＭ１乃至Ｍ３が同時にフレームワーク２に接続している。この実施例３のアプリケーションシステム１を用いて、実施例３のプラグイン方法でも、実施例２で説明したのと同様に、図１５のアプリケーションシステム１としての音再生機能を達成するように、デマルチプレクサＭ１、ＷＭＡデコーダＭ２、オーディオドライバＭ３の順番になるシーケンスにしたがい、デマルチプレクサＭ１、ＷＭＡデコーダＭ２、オーディオドライバＭ３のソフトウェアを実行することができる。そして、実施例３のアプリケーションシステム１は、ＷＭＡ形式で圧縮された音データを再生することができる。
【００５５】
さらに、実施例３のアプリケーションシステム１では、実施例１でモジュールＭ１とＭ２を切り換えたのと同様に、複数のモジュールＭ２とＭ４のフレームワーク２に対する接続を切り換えることができる。この実施例３のアプリケーションシステム１を用いれば、実施例３のプラグイン方法により、実施例１で説明したのと同様に、図１５のアプリケーションシステム１としての音再生機能のなかの音圧縮データを対応する圧縮形式で伸張する機能を達成するように、ＷＭＡデコーダＭ２とＡＡＣデコーダＭ４の一方を選択するシーケンスにしたがい、ＷＭＡデコーダＭ２とＡＡＣデコーダＭ４の一方をプレーヤ２に接続する。そして、選択されたモジュールがＷＭＡデコーダＭ２であれば、さらに、デマルチプレクサＭ１、ＷＭＡデコーダＭ２、オーディオドライバＭ３の順番になるシーケンスにしたがい、ＷＭＡ形式で圧縮された音データを再生することができる。一方、選択されたモジュールがＡＡＣデコーダＭ４であれば、さらに、デマルチプレクサＭ１、ＡＡＣデコーダＭ４、オーディオドライバＭ３の順番になるシーケンスにしたがい、ＡＡＣ形式で圧縮された音データを再生することができる。
【００５６】
このように、実施例３のアプリケーションシステム１で、圧縮された音データの変換方式を変更するには、プレーヤ２の構成は変更する必要が無く、ＷＭＡデコーダＭ２とＡＡＣデコーダＭ４とを切り換えるのみでよい。そして、ＷＭＡデコーダＭ２とＡＡＣデコーダＭ４との切り換えは、ＷＭＡデコーダＭ２のエントリインタフェースＩｅ２のエントリ名である関数ポインタWMADecoder_QueryInterface()と、ＡＡＣデコーダＭ４のエントリインタフェースＩｅ４のエントリ名である関数ポインタAACDecoder_QueryInterface()を変更すればよい。このように、実施例３のアプリケーションシステム１によれば、圧縮された音データの変換方式の変更を容易に行うことが可能になる。
【実施例４】
【００５７】
図２０に示すように、実施例４に係るソフトウェアのプラグイン方法は、図６の実施例１のプラグイン方法と比較して、インタフェースの取得方法が異なっている。言い換えると、オペレーションインタフェースの取得に関して、実施例１のプラグイン方法では、オペレーション名をエントリインタフェースの引数として指定してオペレーションインタフェースの関数ポインタを取得するのに対して、実施例４のプラグイン方法では、エントリインタフェースを呼び出すことによって、オペレーションインタフェースの関数ポインタの配列の先頭ポインタを取得する点が異なっている。
【００５８】
図１のアプリケーションシステム１によるソフトウェアのプラグイン方法について説明する。例として、モジュールＭ１に組まれたソフトウェアをフレームワーク２にプラグインし、次に、モジュールＭ２に組まれたソフトウェアをフレームワーク２にプラグインする場合について説明する。
【００５９】
図２１で示すように、プラグインインタフェースでは、オペレーションインタフェースの関数ポインタを配列として定義している。エントリインタフェースはこの配列の先頭アドレスを返すものとする。
【００６０】
図２０に示すように、ソフトウェアのプラグイン方法では、まず、ステップＳ１で、図１の登録部１４が、モジュールライブラリ１０に基づいて、ソフトウェアのモジュールＭ１が有するエントリインタフェースＩｅ１のエントリ名である関数ポインタM1_QueryInterface()をフレームワーク２が登録する。フレームワーク２は関数ポインタM1_QueryInterface()から関数で表現されたエントリインタフェースＩｅ１を呼び出しオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの取得が可能になる。
【００６１】
ステップＳ２で、宣言部３が、モジュールＭ１のオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔの関数ポインタ型を図２０のＣによる関数ポインタ型宣言例に示すように宣言する。なお、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔそれぞれが行う入出力の処理もいわゆる関数であると考えられるので、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔそれぞれが対応する関数ＣｏｄｅｃＯｐｅｎ、ＣｏｄｅｃＣｌｏｓｅ、ＣｏｄｅｃＰｒｏｐｅｒｔｙ、ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａを宣言し定義している。これらの宣言により、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔ毎に、フレームワーク２がどのような出力データを出力し、どのような入力データを入力するか明確になり、図７に示すように、フレームワーク２にインタフェースＩｅ１、Ｉｏ、Ｉｃ、Ｉｐ、Ｉｔの接続準備ができたことになる。
【００６２】
ステップＳ３で、取得部４が、エントリインタフェースＩｅ１の関数ポインタM1_QueryInterface()に基づいてエントリインタフェースＩｅ１を呼び出す。この呼び出しにより、フレームワーク２はモジュールＭ１が有するオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔのオペレーション名である関数ポインタOpen()、Close()、Property()、TranslateData()の配列の先頭アドレスを取得する。この取得により、フレームワーク２が関数ポインタOpen()、Close()、Property()、TranslateData()に基づいてオペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを呼び出す。図８に示すように、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔがフレームワーク２に接続することにより、モジュールＭ１とフレームワーク２は接続され、フレームワーク２の制御により、モジュールＭ１のソフトウェアを実施することができるようになる。なお、図２０のＣによるオペレーションインタフェースの関数ポインタの取得例によれば、エントリインタフェースの関数query_interface()を呼び出し、取得したオペレーションインタフェースの配列の先頭アドレスを、宣言した関数ポインタをメンバに持った構造体のポインタにキャストし、関数ＣｏｄｅｃＯｐｅｎ、ＣｏｄｅｃＣｌｏｓｅ、ＣｏｄｅｃＰｒｏｐｅｒｔｙ、ＣｏｄｅｃＴｒａｎｓｌａｔｅＤａｔａをフレームワーク２は取得することができる。
【００６３】
ステップＳ４で、オペレーションインタフェースＩｏ、Ｉｃ、Ｉｐ、Ｉｔを用いて、処理部５がモジュールＭ１のソフトウェアを実行処理する。処理部５からの制御により、モジュールＭ１はフレームワーク２に接続するモジュールＭ１自身の生成、モジュールＭ１の固有の処理と、フレームワーク２に接続するモジュールＭ１自身の削除を実施する。
【００６４】
このように、プラグインインタフェース側で、オペレーションインタフェースの関数ポインタの配列を定義し、エントリインタフェースで配列の先頭ポインタを返すように設計することによって、アプリケーション側でのオペレーションインタフェースの関数ポインタの取得に際しては、エントリインタフェースを呼び出すだけでよくなる。これにより、オペレーションインタフェースの取得が簡単に行える。
【００６５】
実施例１乃至４は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、実施例１乃至４によって本発明の技術的範囲が限定的に解釈されてはならないものである。本発明は、その技術的思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。すなわち、本発明の特許請求の範囲を逸脱しない範囲で、変更・改良や一部転用などが可能であり、これらすべて本発明の請求範囲内に包含されるものである。
【図面の簡単な説明】
【００６６】
【図１】本発明の一実施形態に係るアプリケーションシステムの構成図である。
【図２】本発明の一実施形態に係るソフトウェアモジュールの階層構造図である。
【図３】本発明の一実施形態に係るソフトウェアモジュールとフレームワークを接続するインタフェースの一覧表である。
【図４】本発明の一実施形態に係るソフトウェアモジュールのデータの流れを示すブロック図である。
【図５】データ変換モジュールとして機能するソフトウェアモジュールのブロック図である。
【図６】本発明の一実施形態に係るプラグイン方法のフローチャートである。
【図７】本発明の一実施形態に係るアプリケーションシステムのプラグイン方法中途における構成図である。
【図８】本発明の一実施形態に係るアプリケーションシステムのプラグイン方法中途における構成図である。
【図９】本発明の一実施形態に係るプラグイン方法における処理方法のフローチャートである。
【図１０】本発明の一実施形態に係るアプリケーションシステムのプラグイン方法中途における構成図である。
【図１１】本発明の一実施形態に係るアプリケーションシステムのプラグイン方法中途における構成図である。
【図１２】本発明の一実施形態に係るアプリケーションシステムの構成図である。
【図１３】本発明の一実施形態に係るアプリケーションシステムのプラグイン方法中途における構成図である。
【図１４】本発明の一実施形態に係るアプリケーションシステムのプラグイン方法中途における構成図である。
【図１５】本発明の一実施形態に係るアプリケーションシステム（プレーヤ）の構成図である。
【図１６】本発明の一実施形態に係るソフトウェアモジュール（デマルチプレクサ）の階層構造図である。
【図１７】本発明の一実施形態に係るソフトウェアモジュール（ＷＭＡデコーダ）の階層構造図である。
【図１８】本発明の一実施形態に係るソフトウェアモジュール（オーディオドライバ）の階層構造図である。
【図１９】本発明の一実施形態に係るソフトウェアモジュール（ＡＡＣデコーダ）の階層構造図である。
【図２０】本発明の一実施形態に係るプラグイン方法のフローチャートである。
【図２１】本発明の一実施形態に係るプラグインインタフェースの定義例である。
【符号の説明】
【００６７】
１    アプリケーションシステム
２    フレームワーク
３    宣言部
４    取得部
５    処理部
６    生成部
７    削除部
８    シーケンス部
９    設定部
１０  モジュールライブラリ
１１  インタフェース層
１２  コア層
１３  ミドルウェアコア
１４  登録部
【図１】
2006309621.tif 000003
【図２】
2006309621.tif 000004
【図３】
2006309621.tif 000005
【図４】
2006309621.tif 000006
【図５】
2006309621.tif 000007
【図６】
2006309621.tif 000008
【図７】
2006309621.tif 000009
【図８】
2006309621.tif 000010
【図９】
2006309621.tif 000011
【図１０】
2006309621.tif 000012
【図１１】
2006309621.tif 000013
【図１２】
2006309621.tif 000014
【図１３】
2006309621.tif 000015
【図１４】
2006309621.tif 000016
【図１５】
2006309621.tif 000017
【図１６】
2006309621.tif 000018
【図１７】
2006309621.tif 000019
【図１８】
2006309621.tif 000020
【図１９】
2006309621.tif 000021
【図２０】
2006309621.tif 000022
【図２１】
2006309621.tif 000023