(57)【要約】      （修正有）【課題】トレースログを出力する機能と、プログラムが本来提供する機能と、を分離して非同期に動作させることが可能なプログラム、情報処理装置およびシステムを提供する。【解決手段】アプリケーション１３０が、画面表示モジュール１２１に対して画面表示命令を通知する。この通知を受けた画面表示モジュール１２１は、ＳｐｏｏｌｅｒＮｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対しての命令をＯＳ１１０（Ｓｐｏｏｌｅｒ）へ通知する。この通知を受けたＳｐｏｏｌｅｒは、画面表示モジュール１２１から通知された命令を解釈し、Ｒｕｎｄｌｌ３２に通知する。この通知を受けたＲｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、命令をトレースログ出力モジュール１２５へ通知する。この通知を受けたトレースログ出力モジュール１２５は、「命令が呼び出されたこと」を記憶装置１０１に書き込む。【選択図】図６
2015169968.tif 000002
【特許請求の範囲】
【請求項１】
第１モジュールと第２モジュールとを少なくとも含むプログラムであって、
前記第１モジュールは、所定の機能を提供するためのモジュールであって、前記所定の機能に関する情報を書き込む命令を、前記プログラムとは異なる第２プログラムへ通知し、
前記第２モジュールは、前記第２プログラムから前記情報を書き込む命令を受けて、前記情報を記憶装置に書き込む、
プログラム。
【請求項２】
前記第２モジュールは、前記第１モジュールとは非同期に、前記情報を前記記憶装置に書き込む、
請求項１に記載のプログラム。
【請求項３】
前記所定の機能は、印刷設定を行うための画面を表示する機能である、
請求項１または請求項２に記載のプログラム。
【請求項４】
前記所定の機能は、印刷データを描画する機能である、
請求項１または請求項２に記載のプログラム。
【請求項５】
前記第１モジュールは、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを利用して、前記情報を書き込む命令を前記第２プログラムへ通知し、
前記第２プログラムは、
Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを利用して、前記第１モジュールからの前記情報を書き込む命令を受信し、前記第２モジュールに対して前記情報を書き込む命令を通知する、
請求項１乃至４のうちの何れか１項に記載のプログラム。
【請求項６】
第１モジュールと第２モジュールとを少なくとも含むプログラムを実行可能な情報処理装置であって、
前記第１モジュールは、所定の機能を提供するためのモジュールであって、前記所定の機能に関する情報を書き込む命令を、前記プログラムとは異なる第２プログラムへ通知し、
前記第２モジュールは、前記第２プログラムから前記情報を書き込む命令を受けて、前記情報を記憶装置に書き込む、
情報処理装置。
【請求項７】
画像処理装置にデータを送信する情報処理装置により実行可能なプログラムと、前記情報処理装置から受信したデータに基づいて処理を行う画像処理装置と、を含むシステムであって、
前記プログラムは、
所定の機能を提供するためのモジュールであって、前記所定の機能に関する情報を書き込む命令を、前記プログラムとは異なる第２プログラムへ通知する第１モジュールと、
前記第２プログラムから前記情報を書き込む命令を受けて、前記情報を記憶装置に書き込む第２モジュールと、を含む、
システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置およびシステムに関する。
【背景技術】
【０００２】
ソフトウェア開発における代表的な障害解析手法として、トレースログ(どの関数まで処理が行われたのかを追跡するためのログ)をコンソールやファイルに出力し、そこから障害の原因となる箇所を絞り込んでいくという手法がある。
【０００３】
例えば市場リリースされているプリンタドライバにトレースログを出力する機能を実装し、障害発生時のみトレースログを出力するような仕組みを提供することが考えられている。しかしながら、この方法では、トレースログをファイルに出力、つまり低速な外部記憶装置に出力するため、プログラム本来の処理速度が低下してしまう。
【０００４】
この処理速度の低下の問題を解決するために、トレースログを低速な外部記憶装置に対して出力する部分と、プログラム本来の処理部分とを分離して、お互いに非同期に動作させることが考えられる。例えば特許文献１には、プログラム本来の処理を行う部分とトレースログを出力する部分をマルチスレッド化して分離する構成が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、例えばＷｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおいては、特許文献１に開示された方法（マルチスレッド化）は推奨されていない(つまり、ＯＳとの親和性が保てないという問題がある)。例えば、トレースログ出力完了前に印刷を完了してしまい、マルチスレッドの処理が正しく行われず、プリンタドライバがクラッシュするおそれがある。また、ＯＳとの親和性を度外視してマルチスレッドで処理を実現したとしても、トレースログの出力処理が終わるまでとプリンタドライバ本来の処理が終わるまでとを同期する必要があるので、結局、プログラム全体としては高速化されないという問題がある。
【０００６】
本発明は、上記に鑑みてなされたものであって、トレースログを出力する機能と、プログラムが本来提供する機能とを分離して非同期に動作させることが可能なプログラム、情報処理装置およびシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明は、第１モジュールと第２モジュールとを少なくとも含むプログラムであって、前記第１モジュールは、所定の機能を提供するためのモジュールであって、前記所定の機能に関する情報を書き込む命令を、前記プログラムとは異なる第２プログラムへ通知し、前記第２モジュールは、前記第２プログラムから前記情報を書き込む命令を受けて、前記情報を記憶装置に書き込むプログラムである。
【発明の効果】
【０００８】
本発明によれば、トレースログを出力する機能と、プログラムが本来提供する機能とを分離して非同期に動作させることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、システムの構成の一例を示す図である。
【図２】図２は、ＰＣのハードウェア構成の一例を示す図である。
【図３】図３は、ＰＣの機能構成の一例を示す図である。
【図４】図４は、プリンタドライバの機能構成の一例を示す図である。
【図５】図５は、ＯＳの機能構成の一例を示す図である。
【図６】図６は、プリンタドライバの画面を表示する際のＰＣ内の各モジュールの連携を説明するための図である。
【図７】図７は、プリンタドライバの画面を表示する際のＰＣ内の各モジュールの動作例を示すフローチャートである。
【図８】図８は、プリンタドライバの画面を表示する際のＰＣ内の各モジュールの動作手順の一例を示すシーケンス図である。
【図９】図９は、プリンタドライバで印刷を実行する際のＰＣ内の各モジュールの連携を説明するための図である。
【図１０】図１０は、アプリケーションが、プリンタドライバに対して印刷開始命令を通知する場合のＰＣ内の各モジュールの動作例を示すフローチャートである。
【図１１】図１１は、プリンタドライバで印刷を実行する際のＰＣ内の各モジュールの動作手順の一例を示すシーケンス図である。
【図１２】図１２は、ランゲージモニタが、Ｓｐｏｏｌｅｒから印刷のタイミングを示す情報を通知された場合のＰＣ内の各モジュールの連携を説明するための図である。
【図１３】図１３は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュールに対して通知を送るのに用いられる関数の一例を示す図である。
【図１４】図１４は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュールに対してどのようなメッセージを送るのかを決定するのに用いられる関数の一例を示す図である。
【図１５】図１５は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュールに対して通知するメッセージの仕様の一例を示す図である。
【図１６】図１６は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュールに対して送るメッセージの具体例を示す図である。
【図１７】図１７は、通常想定されるＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎの使用例を示す図である。
【図１８】図１８は、Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるランゲージモニタとポートモニタを示す図である。
【図１９】図１９はプリンタドライバのインストールパッケージの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照しながら、本発明に係るプログラム、情報処理装置およびシステムの実施形態を詳細に説明する。
【００１１】
図１は、実施形態のシステム１の構成の一例を示す図である。図１に示すように、システム１は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）１０と、プリンタ２０とを備え、これらはインターネットなどのネットワーク３０を介して接続されている。プリンタ２０は、ＰＣ１０から受信したデータに基づいて処理（この例では印刷処理）を行う。この例では、ＰＣ１０は請求項の「情報処理装置」に対応し、プリンタ２０は請求項の「画像処理装置」に対応していると考えることができるが、これに限られるものではない。また、図１の例では、１つのプリンタ２０のみを例示しているが、これに限らず、システム１に含まれるプリンタ２０の台数は任意である（２台以上のプリンタ２０が含まれる形態であってもよい）。
【００１２】
図２は、ＰＣ１０のハードウェア構成の一例を示す図である。図２に示すように、ＰＣ１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３と、ＨＤＤ（Ｈａｒｄ Ｄｉｓｋ Ｄｒｉｖｅ）１４と、Ｉ／Ｆ１５とを備え、これらはバスを介して接続されている。また、Ｉ／Ｆ１５には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）１６及び操作部１７が接続されている。
【００１３】
ＣＰＵ１１は演算手段であり、ＰＣ１０全体の動作を制御する。ＲＡＭ１２は、情報の高速な読み書きが可能な揮発性の記憶媒体であり、ＣＰＵ１１が情報を処理する際の作業領域（ワークエリア）として用いられる。ＲＯＭ１３は、読み出し専用の不揮発性記憶媒体であり、ファームウェア等のプログラムが格納されている。ＨＤＤ１４は、情報の読み書きが可能な不揮発性の記憶媒体であり、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や各種の制御プログラム、アプリケーション・プログラム等が格納されている。Ｉ／Ｆ１５は、バスと各種のハードウェアやネットワーク等を接続する制御を行う。ＬＣＤ１６は、各種の情報を表示するディスプレイ装置であり、ユーザがＰＣ１０の状態を確認するための視覚的ユーザインタフェースである。操作部１７は、キーボードやマウス等、ユーザがＰＣ１０に対して情報を入力するためのユーザインタフェースである。
【００１４】
図３は、ＰＣ１０の機能構成の一例を示すブロック図である。図３の例では、ＰＣ１０は、ＨＤＤ１４等の記憶装置１０１と、プリンタ２０と通信を行う通信部１０２とを有し、ＯＳ１１０、プリンタ２０に対応するプリンタドライバ１２０、アプリケーション１３０がインストールされている。印刷は、アプリケーション１３０が、ＯＳ１１０を介してプリンタドライバに命令（印刷の実行命令）を送ることで実現される。なお、ＯＳ１１０、プリンタドライバ１２０およびアプリケーション１３０の各々の機能は、ＣＰＵ１１が、対応するプログラムを実行することにより実現される。
【００１５】
図４は、プリンタドライバ１２０の機能構成の一例を示すブロック図である。図４に示すように、プリンタドライバ１２０は、画面表示モジュール１２１と、描画モジュール１２２と、ランゲージモニタ１２３と、ポートモニタ１２４と、トレースログ出力モジュール１２５とを有する。
【００１６】
画面表示モジュール１２１は、印刷設定を行うための画面を表示する機能を有する。画面表示モジュール１２１は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を有し、ここではＷｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを呼び出すための手続き処理を行う。詳しくは後述するが、画面表示モジュール１２１は、アプリケーション１３０から画面を表示する命令（以下、「画面表示命令」と称する場合がある）を受信した場合、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「画面表示命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０へ通知する。この例では、プリンタドライバ１２０は請求項の「プログラム」に対応し、画面表示モジュール１２１は請求項の「第１モジュール」に対応し、ＯＳ１１０は請求項の「第２プログラム」に対応していると考えることができる。また、この例では、画面表示モジュール１２１が有する本来の機能は請求項の「所定の機能」に対応し、トレースログ出力モジュール１２５に対して「画面表示命令が呼び出されたことをログとして書き込む」という命令は、請求項の「所定の機能に関する情報を書き込む命令」に対応していると考えることができる。
【００１７】
描画モジュール１２２は、印刷データを描画（生成）する機能を有する。描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を有し、ここではＷｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを呼び出すための手続き処理を行う。詳しくは後述するが、描画モジュール１２２は、アプリケーション１３０から印刷を開始する命令（以下の説明では、「印刷開始命令」と称する場合がある）を受信した場合、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「印刷開始命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０へ通知する。この例では、プリンタドライバ１２０は請求項の「プログラム」に対応し、描画モジュール１２２は請求項の「第１モジュール」に対応し、ＯＳ１１０は請求項の「第２プログラム」に対応していると考えることができる。また、この例では、描画モジュール１２２が有する本来の機能（印刷データを描画する機能）は請求項の「所定の機能」に対応し、トレースログ出力モジュール１２５に対して「印刷開始命令が呼び出されたことをログとして書き込む」という命令は、請求項の「所定の機能に関する情報を書き込む命令」に対応していると考えることができる。
【００１８】
ランゲージモニタ１２３は、例えばＯＳ１１０（Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるＳｐｏｏｌｅｒ）から送信されたデータを受信し、ポートモニタ１２４へ送信する機能を有するが、これに限られるものではなく、様々な機能を設定することが可能である。ランゲージモニタ１２３も、画面表示モジュール１２１および描画モジュール１２２と同様に、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を有し、ここではＷｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを呼び出すための手続き処理を行う。ランゲージモニタ１２３でも、トレースログを出力する際に、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、ＯＳ１１０に対して通知を行うことができる。例えばランゲージモニタ１２３が、請求項の「第１モジュール」に対応すると考えることもできる。
【００１９】
ポートモニタ１２４は、ランゲージモニタ１２３から送信されたデータを受信し、プリンタ２０と接続されたポートドライバへ送信する機能を有する。ポートモニタ１２４も、画面表示モジュール１２１、描画モジュール１２２およびランゲージモニタ１２３と同様に、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を有し、ここではＷｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを呼び出すための手続き処理を行う。ポートモニタ１２４でも、トレースログを出力する際に、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、ＯＳ１１０に対して通知を行うことができる。例えばポートモニタ１２４が、請求項の「第１モジュール」に対応すると考えることもできる。
【００２０】
トレースログ出力モジュール１２５は、ＯＳ１１０から、画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２４の各々のログを書き込む命令を受けて、当該情報を記憶装置１０１に書き込む。図４の例では、トレースログ出力モジュール１２５は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ受信部１２６と、トレースログ書き込み部１２７とを有する。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ受信部１２６は、ＯＳ１１０から、画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２４の各々の機能に関する情報をログとして書き込む命令（ログを書き込む命令）を受信する。トレースログ書き込み部１２７は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ受信部１２６で受信した命令に応じて、ログとしての書き込みが要求された情報を記憶装置１０１に書き込む。この例では、トレースログ出力モジュール１２５は、請求項の「第２モジュール」に対応していると考えることができる。
【００２１】
次に、ＯＳ１１０の機能について説明する。この例では、ＯＳ１１０は、ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎを利用して、画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２４の各々から、所定の情報をログとして書き込む命令を受信し、トレースログ出力モジュール１２５に対して当該所定の情報を書き込む命令を通知する。図５は、ＯＳ１１０の機能構成の一例を示すブロック図である。図５に示すように、ＯＳ１１０は、Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるＳｐｏｏｌｅｒと、Ｄｌｌ（実行ファイル）を起動するためのＲｕｎｄｌｌ３２とを有する。
【００２２】
次に、図６を用いて、プリンタドライバ１２０の画面を表示する際のＰＣ１０内の各モジュールの連携について説明する。まず、アプリケーション１３０が、画面表示モジュール１２１に対して画面表示命令を通知する。この通知を受けた画面表示モジュール１２１は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「画面表示命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０（Ｓｐｏｏｌｅｒ）へ通知する。この通知を受けたＳｐｏｏｌｅｒは、画面表示モジュール１２１から通知された命令を解釈し、Ｒｕｎｄｌｌ３２に通知する。この通知を受けたＲｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、「画面表示命令が呼び出されたことをログとして書き込む」という命令を、トレースログ出力モジュール１２５へ通知する。この通知を受けたトレースログ出力モジュール１２５は、「画面表示命令が呼び出されたこと」を記憶装置１０１に書き込む。
【００２３】
この例では、画面表示モジュール１２１は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「画面表示命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０へ通知し、この通知を受けたＯＳ１１０は、トレースログ出力モジュール１２５に対して、「画面表示命令が呼び出されたことをログとして書き込む」という命令を通知する。これにより、トレースログ出力モジュール１２５は、画面表示モジュール１２１とは非同期に、トレースログの出力を行うことができる。また、プリンタドライバ１２０とは別に、トレースログの出力を行うためのアプリケーションをインストールする必要も無いので、例えばプリンタドライバ１２０以外はインストールしたくないという顧客の環境にも合わせることが可能になる。
【００２４】
図７は、プリンタドライバ１２０の画面を表示する際のＰＣ１０内の各モジュールの動作例を示すフローチャートである。図７に示すように、まずアプリケーション１３０が、画面表示モジュール１２１に対して画面表示命令を通知する（ステップＳ１）。次に、この通知を受けた画面表示モジュール１２１は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「画面表示命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０のＳｐｏｏｌｅｒへ通知する（ステップＳ２）。次に、ＯＳ１１０のＳｐｏｏｌｅｒは、画面表示モジュール１２１からの通知内容を解釈する（ステップＳ３）。そして、Ｓｐｏｏｌｅｒは、Ｒｕｎｄｌｌ３２に対して、トレースログ出力モジュール１２５を起動し、「画面表示命令が呼び出されたこと」をログとして書き込むように命令する（ステップＳ４）。続いて、Ｒｕｎｄｌｌ３２が起動し（ステップＳ５）、Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動する（ステップＳ６）。そして、Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５に対して、「画面表示命令が呼び出されたことをログとして書き込む」という命令を通知する（ステップＳ７）。この通知を受けたトレースログ出力モジュール１２５は、Ｒｕｎｄｌｌ３２から通知された命令に従って、「画面表示命令が呼び出されたこと」をログとして記憶装置１０１に書き込む（ステップＳ８）。
【００２５】
図８は、プリンタドライバ１２０の画面を表示する際のＰＣ１０内の各モジュールの動作手順の一例を示すシーケンス図である。図８に示すように、まずアプリケーション１３０が、画面表示モジュール１２１に対して画面表示命令を通知する（ステップＳ１１）。次に、画面表示モジュール１２１は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「画面表示命令が呼び出されたことをログとして書き込む」という命令を、Ｓｐｏｏｌｅｒへ通知する（ステップＳ１２）。次に、Ｓｐｏｏｌｅｒは、画面表示モジュール１２１からの通知内容を解釈し、Ｒｕｎｄｌｌ３２に対して、トレースログ出力モジュール１２５を起動し、「画面表示命令が呼び出されたこと」をログとして書き込むように命令する（ステップＳ１３）。Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、トレースログ出力モジュール１２５に対して、「画面表示命令が呼び出されたことをログとして書き込む」という命令を通知する（ステップＳ１４）。この通知を受けたトレースログ出力モジュール１２５は、Ｒｕｎｄｌｌ３２から通知された命令に従って、「画面表示命令が呼び出されたこと」をログとして記憶装置１０１に書き込む（ステップＳ１５）。
【００２６】
次に、図９を用いて、プリンタドライバ１２０で印刷を実行する際のＰＣ１０内の各モジュールの連携について説明する。一例として、アプリケーション１３０が、プリンタドライバ１２０（描画モジュール１２２）に対して、印刷開始命令を通知する場合を例に挙げて説明する。この通知を受けた描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「印刷開始命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０（Ｓｐｏｏｌｅｒ）へ通知する。この通知を受けたＳｐｏｏｌｅｒは、描画モジュール１２２から通知された命令を解釈し、Ｒｕｎｄｌｌ３２に通知する。この通知を受けたＲｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、「印刷開始命令が呼び出されたことをログとして書き込む」という命令を、トレースログ出力モジュール１２５へ通知する。この通知を受けたトレースログ出力モジュール１２５は、「印刷開始命令が呼び出されたこと」を記憶装置１０１に書き込む。
【００２７】
この例では、描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「印刷開始命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０へ通知し、この通知を受けたＯＳ１１０は、トレースログ出力モジュール１２５に対して、「印刷開始命令が呼び出されたことをログとして書き込む」という命令を通知する。これにより、トレースログ出力モジュール１２５は、描画モジュール１２２とは非同期に、トレースログの出力を行うことができる。
【００２８】
図１０は、アプリケーション１３０が、プリンタドライバ１２０（描画モジュール１２２）に対して、印刷開始命令を通知する場合のＰＣ１０内の各モジュールの動作例を示すフローチャートである。図１０に示すように、まず、アプリケーション１３０が、描画モジュール１２２に対して印刷開始命令を通知する（ステップＳ２０）。次に、この通知を受けた描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「印刷開始命令が呼び出されたことをログとして書き込む」という命令を、ＯＳ１１０のＳｐｏｏｌｅｒへ通知する（ステップＳ２１）。次に、ＯＳ１１０のＳｐｏｏｌｅｒは、描画モジュール１２２からの通知内容を解釈する（ステップＳ２２）。そして、Ｓｐｏｏｌｅｒは、Ｒｕｎｄｌｌ３２に対して、トレースログ出力モジュール１２５を起動し、「印刷開始命令が呼び出されたこと」をログとして書き込むように命令する（ステップＳ２３）。続いて、Ｒｕｎｄｌｌ３２が起動し（ステップＳ２４）、Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動する（ステップＳ２５）。そして、Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５に対して、「印刷開始命令が呼び出されたことをログとして書き込む」という命令を通知する（ステップＳ２６）。この通知を受けたトレースログ出力モジュール１２５は、Ｒｕｎｄｌｌ３２から通知された命令に従って、「印刷開始命令が呼び出されたこと」をログとして記憶装置１０１に書き込む（ステップＳ２７）。
【００２９】
図１１は、プリンタドライバ１２０で印刷を実行する際のＰＣ１０内の各モジュールの動作手順の一例を示すシーケンス図である。まず、アプリケーション１３０が、プリンタドライバ１２０（描画モジュール１２２）に対して、印刷開始命令を通知する場合におけるＰＣ１０内の各モジュールの動作手順の一例を説明する。図１１に示すように、アプリケーション１３０が、描画モジュール１２２に対して印刷開始命令を通知する（ステップＳ３０）。次に、描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「印刷開始命令が呼び出されたことをログとして書き込む」という命令を、Ｓｐｏｏｌｅｒへ通知する（ステップＳ３１）。次に、Ｓｐｏｏｌｅｒは、描画モジュール１２２からの通知内容を解釈し、Ｒｕｎｄｌｌ３２に対して、トレースログ出力モジュール１２５を起動し、「印刷開始命令が呼び出されたこと」をログとして書き込むように命令する（ステップＳ３２）。Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、トレースログ出力モジュール１２５に対して、「印刷開始命令が呼び出されたことをログとして書き込む」という命令を通知する（ステップＳ３３）。この通知を受けたトレースログ出力モジュール１２５は、Ｒｕｎｄｌｌ３２から通知された命令に従って、「印刷開始命令が呼び出されたこと」をログとして記憶装置１０１に書き込む（ステップＳ３４）。
【００３０】
次に、アプリケーション１３０が、プリンタドライバ１２０（描画モジュール１２２）に対して、印刷データの描画を命令する描画命令を通知する場合におけるＰＣ１０内の各モジュールの動作手順の一例を説明する。まず、アプリケーション１３０が、描画モジュール１２２に対して描画命令を通知する（ステップＳ３５）。この通知を受けた描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「描画命令が呼び出されたことをログとして書き込む」という命令を、Ｓｐｏｏｌｅｒへ通知する（ステップＳ３６）。次に、Ｓｐｏｏｌｅｒは、描画モジュール１２２からの通知内容を解釈し、Ｒｕｎｄｌｌ３２に対して、トレースログ出力モジュール１２５を起動し、「描画命令が呼び出されたこと」をログとして書き込むように命令する（ステップＳ３７）。Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、トレースログ出力モジュール１２５に対して、「描画命令が呼び出されたことをログとして書き込む」という命令を通知する（ステップＳ３８）。この通知を受けたトレースログ出力モジュール１２５は、Ｒｕｎｄｌｌ３２から通知された命令に従って、「描画命令が呼び出されたこと」をログとして記憶装置１０１に書き込む（ステップＳ３９）。
【００３１】
次に、アプリケーション１３０が、プリンタドライバ１２０（描画モジュール１２２）に対して、印刷の終了を命令する印刷終了命令を通知した場合におけるＰＣ１０内の各モジュールの動作手順の一例を説明する。まず、アプリケーション１３０が、描画モジュール１２２に対して印刷終了命令を通知する（ステップＳ４０）。この通知を受けた描画モジュール１２２は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して「印刷終了命令が呼び出されたことをログとして書き込む」という命令を、Ｓｐｏｏｌｅｒへ通知する（ステップＳ４１）。次に、Ｓｐｏｏｌｅｒは、描画モジュール１２２からの通知内容を解釈し、Ｒｕｎｄｌｌ３２に対して、トレースログ出力モジュール１２５を起動し、「印刷終了命令が呼び出されたこと」をログとして書き込むように命令する（ステップＳ４２）。Ｒｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、トレースログ出力モジュール１２５に対して、「印刷終了命令が呼び出されたことをログとして書き込む」という命令を通知する（ステップＳ４３）。この通知を受けたトレースログ出力モジュール１２５は、Ｒｕｎｄｌｌ３２から通知された命令に従って、「印刷終了命令が呼び出されたこと」をログとして記憶装置１０１に書き込む（ステップＳ４４）。
【００３２】
次に、図１２を用いて、ランゲージモニタ１２３が、ＯＳ１１０のＳｐｏｏｌｅｒから印刷のタイミング（印刷開始、印刷中、印刷後など）を示す情報を通知された場合のＰＣ１０内の各モジュールの連携について説明する。まず、ＯＳ１１０のＳｐｏｏｌｅｒが、ランゲージモニタ１２３に対して、印刷のタイミングを示す情報を通知する。この通知を受けたランゲージモニタ１２３は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部を介して、トレースログ出力モジュール１２５に対して所定の情報（ランゲージモニタ１２３が有する機能に関する情報）をログとして書き込むという命令を、ＯＳ１１０（Ｓｐｏｏｌｅｒ）へ通知する。この通知を受けたＳｐｏｏｌｅｒは、ランゲージモニタ１２３から通知された命令を解釈し、Ｒｕｎｄｌｌ３２に通知する。この通知を受けたＲｕｎｄｌｌ３２は、トレースログ出力モジュール１２５を起動し、「所定の情報（ランゲージモニタ１２３が有する機能に関する情報）をログとして書き込む」という命令を、トレースログ出力モジュール１２５へ通知する。この通知を受けたトレースログ出力モジュール１２５は、所定の情報をログとして記憶装置１０１に書き込む。なお、この場合におけるＰＣ１０内の各モジュールの動作フローや動作手順については、プリンタドライバ１２０の画面を表示する際のＰＣ１０内の各モジュールの動作フローや動作手順、プリンタドライバ１２０で印刷を実行する際のＰＣ１０内の各モジュールの動作フローや動作手順と同様であるので、詳細な説明については省略する。
【００３３】
図１３は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュール１２５に対して通知を送るのに用いられる関数の一例を示す図である。Ｗｉｎｄｏｗｓ（登録商標）のＯＳには、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎという機能が用意されており、この機能を用いることにより、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部から任意のモジュールに通知を送ることが可能になる。この機能を利用するための関数が図１３に示す関数であり、Ｗｉｎｄｏｗｓ（登録商標）のＯＳに予め用意されている。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部は、この関数を呼び出すことにより、トレースログ出力モジュール１２５に通知を送ることができる。
【００３４】
図１４は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュール１２５に対してどのようなメッセージを送るのかを決定するのに用いられる関数の一例を示す図である。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎの機能を利用する際にどのようなメッセージをどのモジュールに対して送るかを決定するための関数が図１４に示す関数であり、Ｗｉｎｄｏｗｓ（登録商標）のＯＳに予め用意されている。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部は、この関数を呼び出すことにより、トレースログ出力モジュール１２５に対してどのようなメッセージを送るかを決定することができる。
【００３５】
図１５は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュール１２５に対して通知するメッセージの仕様の一例を示す図である。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎの機能を利用して所定のモジュールに対して送るメッセージの仕様が図１５に示す仕様であり、Ｗｉｎｄｏｗｓ（登録商標）のＯＳに予め用意されている。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部は、図１４に示す関数を使用する際に図１５に示す仕様に基づいたメッセージを送ることで、トレースログ出力モジュール１２５に対して任意の通知を送ることができる。
【００３６】
図１６は、Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部からトレースログ出力モジュール１２５に対して送るメッセージの具体例を示す図である。図１６におけるcustomUI  dll="abc.dll"の「abc.dll」の部分にトレースログ出力モジュール１２５のモジュール名を記載し、図１６における＜！[CDATA[Test Message]]＞の「Test  Message」の部分に任意のトレースログの文字列を記載することで、トレースログ出力モジュール１２５に対して任意のメッセージ（テキスト）を通知できるようになる。
【００３７】
図１７は、通常想定されるＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎの使用例を示す図である。図１７の例は、図１６における「abc.dll」の部分にＰｏｐｕｐモジュールを指定した例であり、図６における「４．起動および通知」以降の部分のみを記載している（Ｓｐｏｏｌｅｒなどは省略している）。Ｐｏｐｕｐモジュールは、通知を受け取ると通知内容の値を読み込み、ダイアログとしてＰｏｐｕｐするモジュールである。Ｓｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎは、通常はこのような使われ方を想定されているが（例えば印刷開始時にＰｏｐｕｐを上げてユーザに通知する等)、本実施形態においてはトレースログの出力に応用している。
【００３８】
図１８は、Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャにおけるランゲージモニタ１２３とポートモニタ１２４を示す図である。ランゲージモニタ１２３は、Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャの１モジュールであり、プリンタドライバ１２０での印刷時にＳｐｏｏｌｅｒから呼ばれる。ランゲージモニタ１２３は、Ｓｐｏｏｌｅｒのプリントプロセッサから送信されたデータを受信し、ポートモニタ１２４に対してデータを送信するモジュールである。ランゲージモニタ１２３には、Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャで決められているインターフェースがあり、ベンダが開発することもできる。ただし、ベンダが開発しなくともＷｉｎｄｏｗｓ（登録商標）標準のランゲージモニタが動作する。ポートモニタ１２４は、ランゲージモニタ１２３から受信したデータを、プリンタ２０と接続されるポートドライバ１４０へ送信するモジュールである。
【００３９】
図１９は、プリンタドライバ１２０のインストールパッケージの一例を示す図である。プリンタドライバ１２０のインストールパッケージには、画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２４、トレースログ出力モジュール１２５、インストール設定ファイル１２８などが含まれる。画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２４、トレースログ出力モジュール１２５の各々は、Ｄｌｌである。インストール設定ファイル１２８に対して、画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２４およびトレースログ出力モジュール１２５の各々を記載することで、プリンタドライバ１２０のインストール時に、トレースログ出力モジュール１２５も同時にインストールすることができる。このため、トレースログ出力モジュール１２５の導入が容易である。
【００４０】
以上のように、本実施形態では、画面表示モジュール１２１、描画モジュール１２２、ランゲージモニタ１２３、ポートモニタ１２３などの第１モジュールが有するＳｐｏｏｌｅｒ  Ｎｏｔｉｆｉｃａｔｉｏｎ呼び出し部で、ＯＳ１１０の機能であるＲｕｎｄｌｌ３２を呼び出し、Ｒｕｎｄｌｌ３２が別プロセスとしてプリンタドライバ１２０のモジュールであるトレースログ出力１２５を呼び出すことで、別の実行ファイル（ＥＸＥファイル）を新たに導入することなく、非同期にログを取ることが可能になる。
【００４１】
以上、本発明に係る実施形態について説明したが、本発明は、上述の実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【００４２】
なお、上述した実施形態のＰＣ１０で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよいし、インターネット等のネットワーク経由で提供または配布するように構成してもよい。また、各種プログラムを、ＲＯＭ等の不揮発性の記録媒体に予め組み込んで提供するように構成してもよい。
【符号の説明】
【００４３】
１      システム
１０    ＰＣ
２０    プリンタ
３０    ネットワーク
１０１  記憶装置
１０２  通信部
１１０  ＯＳ
１２０  プリンタドライバ
１２１  画面表示モジュール
１２２  描画モジュール
１２３  ランゲージモニタ
１２４  ポートモニタ
１２５  トレースログ出力モジュール
１３０  アプリケーション
【先行技術文献】
【特許文献】
【００４４】
【特許文献１】特開２００２−２１５４３１号公報
【図１】
2015169968.tif 000003
【図２】
2015169968.tif 000004
【図３】
2015169968.tif 000005
【図４】
2015169968.tif 000006
【図５】
2015169968.tif 000007
【図６】
2015169968.tif 000008
【図７】
2015169968.tif 000009
【図８】
2015169968.tif 000010
【図９】
2015169968.tif 000011
【図１０】
2015169968.tif 000012
【図１１】
2015169968.tif 000013
【図１２】
2015169968.tif 000014
【図１３】
2015169968.tif 000015
【図１４】
2015169968.tif 000016
【図１５】
2015169968.tif 000017
【図１６】
2015169968.tif 000018
【図１７】
2015169968.tif 000019
【図１８】
2015169968.tif 000020
【図１９】
2015169968.tif 000021