(57)【要約】【課題】通信動作の確認方法を、通信ケーブルを用いた外部通信によって行う方法と、外部通信を行わずに仮想的に行う方法とで切り替えうる通信システムを提供する。【解決手段】通信システム１は、仮想通信確認手段と外部通信確認手段とを備えており、更に、これら仮想通信確認手段及び外部通信確認手段のいずれかを選択する選択手段を有している。また、仮想通信確認手段は、通信ポート割当手段と仮想送受信手段とを備えており、選択手段により仮想通信確認手段が選択された場合、仮想送受信手段により、一のアプリケーションプログラムから他のアプリケーションプログラムに対してデータの仮想的な送受信を行い、その送受信結果に基づいてデータの通信動作を確認する。【選択図】図１
2010097603.tif 000002
【特許請求の範囲】
【請求項１】
通信機器を接続可能な複数の通信ポートと、メモリとを備えたコンピュータを有し、
前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータは、
複数のアプリケーションプログラムと、
前記アプリケーションプログラムにて生成されるデータについての通信動作を確認する通信動作確認手段と、
を備え、
前記通信動作確認手段は、
前記複数のアプリケーションプログラムにおける、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することで前記データの通信動作を確認する仮想通信確認手段と、
前記通信ポートに前記通信機器が接続されている場合に、前記アプリケーションプログラムにて生成された前記データを、前記通信ポートを介して前記コンピュータの外部に送信することで、前記データの通信動作を確認する外部通信確認手段と、
前記データの通信動作を確認する手段として、前記仮想通信確認手段及び前記外部通信確認手段のいずれかを選択する選択手段と、
を有し、
前記仮想通信確認手段は、
前記一のアプリケーションプログラムに対し、複数の前記通信ポートにおける第１の通信ポートを割り当てると共に、前記他のアプリケーションプログラムに対して第２の通信ポートを割り当て、それら第１の通信ポート及び第２の通信ポートを特定するポート情報を前記メモリに記憶する通信ポート割当手段と、
前記ポート情報に基づいて前記第１の通信ポートと対応する前記第２の通信ポートを特定すると共に、前記一のアプリケーションプログラムから前記第１の通信ポートに送られるべき前記データを、前記第２の通信ポートが受信した前記データとして前記メモリに記憶し、且つ前記他のアプリケージョンプログラムに与える仮想送受信手段と、
を備え、
前記選択手段により当該仮想通信確認手段が選択された場合、前記仮想送受信手段により、前記一のアプリケーションプログラムから前記他のアプリケーションプログラムに対して前記データの仮想的な送受信を行い、その送受信結果に基づいて前記データの通信動作を確認することを特徴とする通信システム。
【請求項２】
前記通信機器が前記通信ポートに接続されているか否かを検出する検出手段を備え、
前記選択手段は、前記検出手段により前記通信機器が検出されたことを条件として前記外部通信確認手段を選択することを特徴とする請求項１に記載の通信システム。
【請求項３】
前記検出手段は、前記通信ポートに特定種類の前記通信機器が接続されているか否かを検出し、
前記選択手段は、前記検出手段により前記特定種類の前記通信機器が検出された場合にのみ前記外部通信確認手段を選択することを特徴とする請求項２に記載の通信システム。
【請求項４】
前記検出手段は、前記通信ポート割当手段によって割り当てられた前記第１の通信ポートに前記通信機器が接続されているか否かを検出し、
前記選択手段は、前記第１の通信ポートに前記通信機器が接続されている場合に前記外部通信確認手段を選択することを特徴とする請求項２又は請求項３に記載の通信システム。
【請求項５】
前記通信ポート割当手段は、
前記仮想通信確認手段に対して命令を与える上位プログラムからの設定変更命令に基づき、前記他のアプリケーションプログラムに割り当てる前記第２の通信ポートを設定変更する設定変更手段を備え、
前記仮想送受信手段による前記仮想的な送受信中に前記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、前記設定変更手段による前記第２の通信ポートの設定変更を中止することを特徴とする請求項１から請求項４のいずれか一項に記載の通信システム。
【請求項６】
前記通信ポート割当手段は、前記一のアプリケーションプログラムに割り当てる前記第１の通信ポートと、前記他のアプリケーションプログラムに割り当てる前記第２の通信ポートとを互いに異なる前記通信ポートとすることを特徴とする請求項１から請求項５のいずれか一項に記載の通信システム。
【請求項７】
通信機器を接続可能な通信ポートと、メモリとを備えたコンピュータを有し、
前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータは、
複数のアプリケーションプログラムと、
各アプリケーションプログラムによる前記通信ポートの呼び出し回数をカウントすると共に、前記各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に前記呼び出し回数を減じる呼び出し回数増減手段と、
前記アプリケーションプログラムが前記通信ポートを呼び出したときに、前記呼び出し回数増減手段による前記呼び出し回数が所定値以下か否かを判断する判断手段と、
前記判断手段によって前記通信ポートの前記呼び出し回数が前記所定値以下と判断された場合に、前記アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するハンドル保存手段と、
前記各アプリケーションプログラムが前記通信ポートを呼び出したときに、前記各アプリケーションプログラムに対し、前記ハンドル保存手段によって保存された前記ハンドルに対応した仮想ハンドルを設定する仮想ハンドル設定手段と、
前記ハンドル保存手段によって保存される前記ハンドルと、前記仮想ハンドル設定手段によって前記各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存する対応データ保存手段と、
前記各アプリケーションプログラムが前記通信ポートを用いて通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記各アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用する通信制御手段と、
を備えたことを特徴とする通信システム。
【請求項８】
前記通信制御手段は、
前記アプリケーションプログラムが特定の通信関連コマンドを実行したときに、前記仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、
前記仮想ハンドル利用確認手段によって前記仮想ハンドルを用いた通信であることが確認された場合に、前記アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用することを特徴とする請求項７に記載の通信システム。
【請求項９】
前記アプリケーションプログラムによる前記通信ポートを使用した通信処理が終了した場合に、前記対応データ保存手段によって保存された前記対応データにおいて、その通信処理が終了した前記アプリケーションプログラムについての前記仮想ハンドルと前記ハンドルとの対応値を破棄する対応値破棄手段を備えたことを特徴とする請求項７又は請求項８に記載の通信システム。
【請求項１０】
前記外部装置は、前記コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末であり、
前記通信制御手段は、
前記コンピュータの複数の前記アプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが前記通信ポートを用いて前記携帯端末の一のプログラムと通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記一のアプリケーションプログラムに設定された前記仮想ハンドルに対応する前記ハンドルを使用し、
前記一のアプリケーションプログラムによる前記通信ポートを用いた通信処理の継続中に、複数の前記アプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて前記携帯端末の他のプログラムと通信を行う場合、前記他のアプリケーションプログラムに設定された前記仮想ハンドルと前記対応データとに基づき、当該通信ポートに対応する前記ハンドルを使用することを特徴とする請求項７から請求項９のいずれか一項に記載の通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信システムに関するものである。
【背景技術】
【０００２】
現在、パーソナルコンピュータなどの情報処理装置では、アプリケーションによる情報通信が広く行われている。この種の情報処理装置では、必要なときに情報通信が円滑に行われるようにするため、所望のタイミングで通信動作を確認しうる構成が求められており、従来では、確認対象となる情報処理装置に通信ケーブルを接続し、当該通信ケーブルを介して外部装置（例えば他のパーソナルコンピュータ）との通信を試行することで通信動作を確認する手法がとられていた。なお、本発明に関連する技術としては特許文献１のようなものがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１９５９５４
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記のような従来構成の場合、通信動作の確認を行う場合、通信ケーブルや他のパーソナルコンピュータなどを必須とするため、これら通信ケーブルや他のパーソナルコンピュータを別途用意する必要があった。しかしながら、このような構成（即ち、通信ケーブルや他のパーソナルコンピュータなどの外部機器の準備を必須とする構成）では、通信動作の確認を、迅速に、或いは容易に行いにくいという問題があった。
【０００５】
また、従来の情報処理装置では、いずれかのアプリケーションプログラムがある通信ポートを使用した場合、当該通信ポートはこのアプリケーションプログラムの占有状態となり、他のアプリケーションプログラムの使用を排除するような制御が行われていた。従って、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用しながら動作確認やその他の通信を同時進行で行うことができず、動作確認やその他の通信を行う上で非常に制約が大きかった。
【０００６】
本発明は、上述した課題を解決するためになされたものであり、通信動作の確認方法を、通信ケーブルを用いた外部通信によって行う方法と、外部通信を行わずに仮想的に行う方法とで切り替えうる通信システムを提供することを第一の目的とする。
また、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができる通信システムを提供することを第二の目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、請求項１の発明は、通信機器を接続可能な複数の通信ポートと、メモリとを備えたコンピュータを有し、前記通信ポートを介して外部装置と通信を行う通信システムであって、前記コンピュータは、複数のアプリケーションプログラムと、前記アプリケーションプログラムにて生成されるデータについての通信動作を確認する通信動作確認手段と、を備え、前記通信動作確認手段は、前記複数のアプリケーションプログラムにおける、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することで前記データの通信動作を確認する仮想通信確認手段と、
前記通信ポートに前記通信機器が接続されている場合に、前記アプリケーションプログラムにて生成された前記データを、前記通信ポートを介して前記コンピュータの外部に送信することで、前記データの通信動作を確認する外部通信確認手段と、前記データの通信動作を確認する手段として、前記仮想通信確認手段及び前記外部通信確認手段のいずれかを選択する選択手段と、を有し、前記仮想通信確認手段は、前記一のアプリケーションプログラムに対し、複数の前記通信ポートにおける第１の通信ポートを割り当てると共に、前記他のアプリケーションプログラムに対して第２の通信ポートを割り当て、それら第１の通信ポート及び第２の通信ポートを特定するポート情報を前記メモリに記憶する通信ポート割当手段と、前記ポート情報に基づいて前記第１の通信ポートと対応する前記第２の通信ポートを特定すると共に、前記一のアプリケーションプログラムから前記第１の通信ポートに送られるべき前記データを、前記第２の通信ポートが受信した前記データとして前記メモリに記憶し、且つ前記他のアプリケージョンプログラムに与える仮想送受信手段と、を備え、前記選択手段により当該仮想通信確認手段が選択された場合、前記仮想送受信手段により、前記一のアプリケーションプログラムから前記他のアプリケーションプログラムに対して前記データの仮想的な送受信を行い、その送受信結果に基づいて前記データの通信動作を確認することを特徴とする。
【０００８】
請求項２の発明は、請求項１に記載の通信システムにおいて、前記通信機器が前記通信ポートに接続されているか否かを検出する検出手段を備え、前記選択手段は、前記検出手段により前記通信機器が検出されたことを条件として前記外部通信確認手段を選択することを特徴とする。
【０００９】
請求項３の発明は、請求項２に記載の通信システムにおいて、前記検出手段は、前記通信ポートに特定種類の前記通信機器が接続されているか否かを検出し、前記選択手段は、前記検出手段により前記特定種類の前記通信機器が検出された場合にのみ前記外部通信確認手段を選択することを特徴とする。
【００１０】
請求項４の発明は、請求項２又は請求項３に記載の通信システムにおいて、前記検出手段は、前記通信ポート割当手段によって割り当てられた前記第１の通信ポートに前記通信機器が接続されているか否かを検出し、前記選択手段は、前記第１の通信ポートに前記通信機器が接続されている場合に前記外部通信確認手段を選択することを特徴とする。
【００１１】
請求項５の発明は、請求項１から請求項４のいずれか一項に記載の通信システムにおいて、前記通信ポート割当手段は、前記仮想通信確認手段に対して命令を与える上位プログラムからの設定変更命令に基づき、前記他のアプリケーションプログラムに割り当てる前記第２の通信ポートを設定変更する設定変更手段を備え、前記仮想送受信手段による前記仮想的な送受信中に前記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、前記設定変更手段による前記第２の通信ポートの設定変更を中止することを特徴とする。
【００１２】
請求項６の発明は、請求項１から請求項５のいずれか一項に記載の通信システムにおいて、前記通信ポート割当手段は、前記一のアプリケーションプログラムに割り当てる前記第１の通信ポートと、前記他のアプリケーションプログラムに割り当てる前記第２の通信ポートとを互いに異なる前記通信ポートとすることを特徴とする。
【００１３】
請求項７の発明は、通信機器を接続可能な通信ポートと、メモリとを備えたコンピュータを有し、前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータが、複数のアプリケーションプログラムと、各アプリケーションプログラムによる前記通信ポートの呼び出し回数をカウントすると共に、前記各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に前記呼び出し回数を減じる呼び出し回数増減手段と、前記アプリケーションプログラムが前記通信ポートを呼び出したときに、前記呼び出し回数増減手段による前記呼び出し回数が所定値以下か否かを判断する判断手段と、前記判断手段によって前記通信ポートの前記呼び出し回数が前記所定値以下と判断された場合に、前記アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するハンドル保存手段と、前記各アプリケーションプログラムが前記通信ポートを呼び出したときに、前記各アプリケーションプログラムに対し、前記ハンドル保存手段によって保存された前記ハンドルに対応した仮想ハンドルを設定する仮想ハンドル設定手段と、前記ハンドル保存手段によって保存される前記ハンドルと、前記仮想ハンドル設定手段によって前記各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存する対応データ保存手段と、前記各アプリケーションプログラムが前記通信ポートを用いて通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記各アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用する通信制御手段と、を備えたことを特徴としている。
【００１４】
請求項８の発明は、請求項７に記載の通信システムにおいて、前記通信制御手段が、前記アプリケーションプログラムが特定の通信関連コマンドを実行したときに、前記仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、前記仮想ハンドル利用確認手段によって前記仮想ハンドルを用いた通信であることが確認された場合に、前記アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用することを特徴としている。
【００１５】
請求項９の発明は、請求項７又は請求項８に記載の通信システムにおいて、
前記アプリケーションプログラムによる前記通信ポートを使用した通信処理が終了した場合に、前記対応データ保存手段によって保存された前記対応データにおいて、その通信処理が終了した前記アプリケーションプログラムについての前記仮想ハンドルと前記ハンドルとの対応値を破棄する対応値破棄手段を備えたことを特徴としている。
【００１６】
請求項１０の発明は、請求項７から請求項９のいずれか一項に記載の通信システムにおいて、
前記外部装置が、前記コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末であり、
前記通信制御手段が、前記コンピュータの複数の前記アプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが前記通信ポートを用いて前記携帯端末の一のプログラムと通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記一のアプリケーションプログラムに設定された前記仮想ハンドルに対応する前記ハンドルを使用し、
前記一のアプリケーションプログラムによる前記通信ポートを用いた通信処理の継続中に、複数の前記アプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて前記携帯端末の他のプログラムと通信を行う場合、前記他のアプリケーションプログラムに設定された前記仮想ハンドルと前記対応データとに基づき、当該通信ポートに対応する前記ハンドルを使用することを特徴としている。
【発明の効果】
【００１７】
請求項１の発明は、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行する仮想通信確認手段と、アプリケーションプログラムにて生成されたデータを、通信ポートを介してコンピュータの外部に送信してデータの通信動作を確認する外部通信確認手段とが設けられているため、状況に応じて仮想通信確認手段と外部通信確認手段とを使い分けることができ、通信動作をより適切な方法で確認できるようになる。例えば、通信ケーブルや外部装置を準備しにくい場合であっても、外部通信確認手段を用いずに仮想通信確認手段によって通信動作を確認でき、通信動作の確認作業やその準備の容易化が効果的に図られる。
また、一のアプリケーションプログラムに対し第１の通信ポートを割り当て、他のアプリケーションプログラムに対し第２の通信ポートを割り当て、それら第１の通信ポート及び第２の通信ポートを特定するポート情報をメモリに記憶しているため、一のアプリケーションプログラムに対応する送信ポートと、他のアプリケーションプログラムに対応する受信ポートとの対応関係を明確にすることができる。
更に、一のアプリケーションプログラムから第１の通信ポートに送られるべきデータを、第２の通信ポートが受信したデータとしてメモリに記憶し、且つ他のアプリケージョンプログラムに与えるように構成されているため、実際に通信ケーブルを通信ポートに接続しなくても、一のアプリケーションプログラムからのデータを第１の通信ポートに与えるという送信状態の確認と、他のアプリケーションプログラムに対するデータを第２の通信ポートにて受信するという受信状態の確認とを仮想的に実現でき、外部通信確認手段を用いない場合であっても通信動作の確認が良好に行われることとなる。
【００１８】
請求項２の発明では、通信機器が通信ポートに接続されているか否かを検出する検出手段が設けられており、検出手段により通信機器が検出されたことを条件として外部通信確認手段が選択されるように構成されている。このようにすると、外部通信確認手段による通信動作の確認が可能なときのみ外部通信確認手段が選択されるようになり、より適切な選択が可能となる。
【００１９】
請求項３の発明は、検出手段により特定種類の通信機器が検出された場合にのみ外部通信確認手段を選択するように構成されている。このようにすると、通信動作確認の対象となる特定種類の通信機器が接続されたとき以外で外部通信確認手段が選択されることがなく、より一層適切な選択が可能となる。
【００２０】
請求項４の発明は、通信ポート割当手段によって割り当てられた第１の通信ポートに通信機器が接続されているか否かを検出し、第１の通信ポートに通信機器が接続されている場合に外部通信確認手段を選択するように構成されている。このようにすると、一のアプリケーションシステムから外部への通信が可能な状態においては、外部通信確認手段を用いてより精度の高い通信動作確認が可能となる。
【００２１】
請求項５の発明は、上位プログラムからの設定変更命令に基づき、他のアプリケーションプログラムに割り当てる第２の通信ポートを設定変更する設定変更手段が設けられているため、他のアプリケーションプログラムに割り当てる通信ポートを必要に応じて変更できる。更に、仮想送受信手段による仮想的な送受信中に設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、設定変更手段による第２の通信ポートの設定変更を中止している。このようにすると、第２の通信ポートを必要に応じて設定変更できるようにしつつ、その設定変更によって仮想的な動作確認が強制的に中断されることを効果的に防止できる。
【００２２】
請求項６の発明は、一のアプリケーションプログラムに割り当てる第１の通信ポートと、他のアプリケーションプログラムに割り当てる第２の通信ポートとが互いに異なる通信ポートとなるように設定している。このようにすると、仮想通信確認手段によって通信動作を確認するときに、第１の通信ポートと第２の通信ポートと区別して適切な動作確認を行うことができる。
【００２３】
請求項７の発明では、呼び出し回数増減手段によってアプリケーションプログラムによる通信ポートの呼び出し回数を管理しており、アプリケーションプログラムが通信ポートを呼び出したときに、呼び出し回数増減手段によって管理される呼び出し回数が所定値以下か否かを判断している。そして、その通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存している。
このようにすると、通信ポートに対するアプリケーションプログラムの呼び出しがどの程度重複しているかを確認できる。そして、呼び出し回数が少ないときに、当該通信ポートで通信を行うためにハンドルを予め保存しておくことができる。
更に、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、ハンドル保存手段によって保存されたハンドルに対応した仮想ハンドルを設定し、この設定された仮想ハンドルと、既に保存されているハンドルとの対応データを保存している。そして、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドルを使用している。
このようにすると、複数のアプリケーションプログラムが同じ通信ポートを呼び出した場合に、各アプリケーションプログラムに仮想ハンドルを割り当てることができ、各アプリケーションプログラムは対応データを拠り所として仮想ハンドルと対応する実際のハンドルを使用し、当該通信ポートでの通信を行うことができるようになる。従って、最初に通信ポートを呼び出したアプリケーションプログラムだけに当該通信ポートを占有させて他のアプリケーションプログラムによる当該通信ポートへのアクセスを排除するといった対応を行う必要がなく、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができるようになる。
【００２４】
請求項８の発明では、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、仮想ハンドル利用確認手段によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドルを使用している。
このようにすると、特定の通信関連コマンドが実行されたことをトリガとして仮想ハンドルを用いた通信を行うことができるようになる。その際、仮想ハンドルを用いた通信を行うか否かの確認を行った上で、通信処理に移行しているため、特定の通信関連コマンドで他の処理を実行する場合（即ち、仮想ハンドルを用いた通信を行わない例外ケース）にも対応しやすくなる。
【００２５】
請求項９の発明は、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、対応データ保存手段によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドルとの対応値を破棄する対応値破棄手段を備えている。このようにすると、通信処理が終了して不要になった仮想ハンドルを削除することができ、対応データを常に適切な状態に維持できるようになる。
【００２６】
請求項１０の発明は、外部装置が、コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末として構成されている。そして、コンピュータの複数のアプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが通信ポートを用いて携帯端末の一のプログラムと通信を行う際に、対応データ保存手段に保存された対応データに従い、一のアプリケーションプログラムに設定された仮想ハンドルに対応するハンドルを使用している。また、一のアプリケーションプログラムによる通信ポートを用いた通信処理の継続中に、複数のアプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて携帯端末の他のプログラムと通信を行う場合、他のアプリケーションプログラムに設定された仮想ハンドルと対応データとに基づき、当該通信ポートに対応するハンドルを使用している。
このようにすると、コンピュータに記憶されたいずれかのアプリケーションプログラムが通信ポートを介して携帯端末のいずれかのプログラムと通信処理を行っている際に、コンピュータの他のアプリケーションプログラムが同じ通信ポートを用いて携帯端末の他のプログラムと通信処理を行うことができるようになる。従って、通信ポートが制約されやすい携帯端末との通信であっても、複数のアプリケーションプログラムが同一の通信ポートを使用して同時期に通信を行うことができるようになり、ひいては、コンピュータと携帯端末との間で多様な処理が実現可能となる。
【図面の簡単な説明】
【００２７】
【図１】図１は、第１実施形態に係る通信システムを概略的に説明する説明図である。
【図２】図２は、図１の通信システムの電気的構成を例示するブロック図である。
【図３】図３は、ハードウェアが接続されているときのＯＳ内の構成を概略的に説明する説明図である。
【図４】図４は、ドライバロード処理の流れを例示するフローチャートである。
【図５】図５は、通信ポートオープン処理の流れを例示するフローチャートである。
【図６】図６は、データ送信処理の流れを例示するフローチャートである。
【図７】図７は、データ受信処理の流れを例示するフローチャートである。
【図８】図８は、第２実施形態に係る通信システムを概略的に説明する説明図である。
【図９】図９は、アプリケーションプログラムによって実行される通信処理の流れを概略的に例示するフローチャートである。
【図１０】図１０は、通信ポートオープン時のＡＰＩフック処理を例示するフローチャートである。
【図１１】図１１（ａ）は、送信関連ＡＰＩが呼び出されたときのＡＰＩフック処理を例示するフローチャートである。図１１（ｂ）は、受信関連ＡＰＩが呼び出されたときのＡＰＩフック処理を例示するフローチャートである。
【図１２】図１２は、通信ポートクローズ時のＡＰＩフック処理を例示するフローチャートである。
【図１３】図１３（ａ）は、各仮想ハンドルと正規のハンドルとの対応データを概念的に説明する説明図であり、図１３（ｂ）は、各アプリケーションプログラムに仮想ハンドルが割り当てられた状態を概念的に説明する説明図である。
【発明を実施するための形態】
【００２８】
[第１実施形態]
以下、本発明の通信システムを具現化した第１実施形態について、図面を参照して説明する。図１は、第１実施形態に係る通信システムを概略的に説明する説明図である。図２は、図１の通信システムの電気的構成を例示するブロック図である。図３は、通信ポートにハードウェアが接続されているときのＯＳ内の構成を概略的に説明する説明図である。図４は、ドライバロード処理の流れを例示するフローチャートである。図５は、通信ポートオープン処理の流れを例示するフローチャートである。図６は、データ送信処理の流れを例示するフローチャートである。図７は、データ受信処理の流れを例示するフローチャートである。
【００２９】
（第１実施形態の通信システムの概要）
図１に示すように、本実施形態に係る通信システム１は、コンピュータ２によって構成されており、このコンピュータ２の内部に、アプリケーションプログラム（以下、アプリケーションとも称する）やオペレーティングシステム（以下、ＯＳとも称する）２０が格納された構成をなしている。コンピュータ２は、ＯＳ２０の制御の下、これらアプリケーションプログラムを実行することで、各種処理を行うように構成されている。なお、図１では、コンピュータ２で用いられる一部のアプリケーションプログラムＡ、Ｂ（図１では、アプリケーションＡ、Ｂと略称）を例示しており、これら以外のアプリケーションプログラムについては図示を省略している。
【００３０】
コンピュータ２は、例えばパーソナルコンピュータとして構成されており、図２に示すように、ＣＰＵ３、ＲＯＭ４、ＲＡＭ５、ハードディスクドライブ（以下ＨＤＤとも称する）６を備えている。また、ＣＰＵ３には、バス１１を介して、出力部７、入力部８、通信部９が接続されている。なお、図示はしていないが、バス１１に接続された各回路とＣＰＵ３との間の入出力制御を行う入出力コントローラなども設けられている。
【００３１】
出力部７は、表示装置やスピーカなどによって構成されており、ＣＰＵ３からの指令に基づいて各種画像や音声を出力する。また、入力部８は、キーボードやマウスなどによって構成されており、ユーザの操作に応じて各種信号を入力する。
【００３２】
通信部９は、アプリケーションプログラムなどによって生成されたデータを外部に送信したり、或いは外部装置からのデータを受信するように機能するものであり、通信インターフェース１３と、複数の通信ポート１４ａ〜１４ｃとを備えた構成をなしている。各通信ポート１４ａ〜１４ｃは、シリアルコネクタやパラレルコネクタとして構成されており、ＲＳ２３２ＣケーブルやＵＳＢケーブルなどの通信ケーブルを介して各種通信機器（例えば、他のコンピュータ、外部記憶装置、その他の情報処理装置等）が接続される構成をなしている。また、通信インターフェース１３は、各通信ポート１４ａ〜１４ｃを介したデータの入出力制御を行うように構成されている。
【００３３】
ＣＰＵ３は、必要に応じ、上記入力部８にて入力された情報の取得、出力部７に対する出力制御、ＲＯＭ４、ＲＡＭ５、ＨＤＤ６に対する読み取り或いは書き込みの制御、或いは、通信部９の制御を行う。また、ＣＰＵ３は、ＨＤＤ６に格納されているプログラムやＨＤＤ６にインストールされたプログラム等をＲＡＭ５にロードして実行する機能を有している。
【００３４】
また、コンピュータ２で用いられるＯＳ２０は、図１のような構成をなしている。なお、図１では、後述する仮想ドライバがロードされた状態を示している。ＯＳ２０としては、例えば、Ｕｎｉｘ（登録商標）や、Ｌｉｎｕｘ、さらには、マイクロソフト社のＷｉｎｄｏｗｓ（登録商標）、その他の任意のＯＳを採用することができる。図１では、その一例として、Ｗｉｎｄｏｗｓ（登録商標）のＮＴ系のＯＳが採用されたときの構成例を示している。
【００３５】
Ｗｉｎｄｏｗｓ（登録商標）のＮＴ系のＯＳであるＯＳ２０は、マイクロカーネル技術とオブジェクト指向技術をベースとし、各サービスを、サブシステムによって実装している。Ｗｉｎ３２サブシステム２１は、サブシステムの１つで、アプリケーションプログラムＡ、Ｂに対して、各種のＡＰＩ(Application Programming Interface)（関数）を提供し、例えば、メモリ管理、プロセス管理、グラフィックス描画などを行う。Ｗｉｎ３２サブシステム２１は、アプリケーションプログラムＡ、Ｂから、例えば、入出力関係のＡＰＩ関数が呼び出されると、そのＡＰＩ関数に応じた入出力要求を、ＩＯマネージャ２２に出力する。
【００３６】
また、ＯＳ２０には、デバイスドライバが組み込まれるようになっており、図１では、後述する仮想ドライバがロードされたときの階層構成を示している。また、図３では、ハードウェアが接続され、このハードウェアのデバイスドライバがロードされているときの階層構成を示している。
【００３７】
（第１実施形態の特徴的構成）
次に、本実施形態の特徴的構成について説明する。
本実施形態に係る通信システム１は、アプリケーションプログラムにて生成されるデータについての通信動作を確認する「通信動作確認手段」を備えている。以下では、この通信動作確認処理について具体的に説明する。
【００３８】
まず、図４を参照してドライバロード処理の流れを説明する。このドライバロード処理は、通信動作の確認処理を行うためのドライバをＲＡＭ５にロードする処理であり、例えば、ユーザによる所定操作時、或いはコンピュータ２の起動時などに実行される。当該処理が開始されると、まず、設定値の取得処理が行われる（Ｓ１）。この設定値の取得処理では、通信が行われるアプリケーションプログラム毎に使用する通信ポートが割り当てられる。例えば、図１のようにシリアル通信を行うアプリケーションとしてアプリケーションＡ、Ｂが存在する場合、一方のアプリケーションプログラムＡに対していずれかの一の通信ポートが割り当てられ、他方のアプリケーションプログラムＢに対して、アプリケーションプログラムＡに割り当てられた通信ポートと異なる通信ポートが割り当てられる。
【００３９】
以下では、アプリケーションプログラムＡに対して通信ポート１４ａが割り当てられ、アプリケーションプログラムＢに対して通信ポート１４ｂが割り当てられた例を挙げて説明する。なお、アプリケーションプログラムＡに割り当てられる通信ポート１４ａは、「第１の通信ポート」に相当し、アプリケーションプログラムＢに割り当てられる通信ポート１４ｂは、「第２の通信ポート」に相当するものであり、以下、通信ポート１４ａを、第１の通信ポートとも称し、通信ポート１４ｂを第２の通信ポートとも称することとする。
【００４０】
Ｓ１では、通信相手のポート番号を設定する処理も行われる。この処理は、仮想的に通信動作確認を行うときの通信相手のポート番号を設定する処理であり、例えばアプリケーションプログラムＡからアプリケーションプログラムＢに対してデータを送信し仮想的な通信動作確認を行う場合、アプリケーションプログラムＡの通信相手のポート番号として、アプリケーションプログラムＢに割り当てられた通信ポート１４ｂのポート番号を設定する。なお、どのアプリケーションプログラムにどの通信ポートを割り当てるか、或いはどの通信ポートとどの通信ポートで仮想的な通信を行うかはユーザによって任意に選択できるようにすることができる。
【００４１】
Ｓ１の処理においてアプリケーションプログラムＡに割り当てられた通信ポート１４ａのポート番号（第１の通信ポートのポート番号）及びアプリケーションプログラムＢに割り当てられた通信ポート１４ｂのポート番号（第２の通信ポートのポート番号）はレジストリに記憶され、更に、通信ポート１４ａの通信相手として通信ポート１４ｂを指定する対応情報もレジストリに記憶される。
【００４２】
なお、ＣＰＵ３は、「通信ポート割当手段」の一例に相当し、アプリケーションプログラムＡ（一のアプリケーションプログラム）に対し、通信ポート１４ａ（第１の通信ポート）を割り当てると共に、アプリケーションプログラムＢ（他のアプリケーションプログラム）に対して通信ポート１４ｂ（第２の通信ポート）を割り当て、それら第１の通信ポート及び第２の通信ポートを特定するポート情報をメモリに記憶するように機能する。また、アプリケーションプログラムＡ（一のアプリケーションプログラム）に割り当てる第１の通信ポートと、アプリケーションプログラムＢ（他のアプリケーションプログラム）に割り当てる第２の通信ポートとを互いに異なる通信ポートとするように機能している。
【００４３】
その後、ハードウェアの接続状況を確認する（Ｓ２）。このＳ２の処理は、通信動作確認を行おうとするアプリケーションプログラムに割り当てられた通信ポートにハードウェア（通信機器）が接続されているか否かを確認する処理であり、上述のようにアプリケーションプログラムＡに対して通信ポート１４ａが割り当てられている場合、この通信ポート１４ａにコンピュータ２と通信を行い得る通信機器が接続されているか否かを確認する。
【００４４】
アプリケーションプログラムＡに割り当てられた通信ポート１４ａにハードウェア（通信機器）が接続されていない場合には、Ｓ３にてＮｏに進み、仮想ドライバをロードする（Ｓ４）。この仮想ドライバは、通信動作の確認を仮想的に行うためのドライバであり、予めＨＤＤ６等の記憶手段に記憶され、ＣＰＵ３によって読み出され実行されるものである。
【００４５】
仮想ドライバがロードされたときには、ＯＳ内部の構成は図１のようになる。この構成では、アプリケーションプログラムＡにて生成された送信データが、Ｗｉｎ３２サブシステム２１、ＩＯマネージャ２２を介してデバイスドライバ上位２３に渡されるようになっており、仮想ドライバは、デバイスドライバ下位２５として構成され、デバイスドライバ２３から上記送信データを取得するように機能する。
【００４６】
なお、ＣＰＵ３は、「仮想通信確認手段」の一例に相当し、コンピュータ２に格納される一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することでデータの通信動作を確認するように機能する。
【００４７】
一方、アプリケーションプログラムＡに割り当てられた通信ポート１４ａにハードウェア（通信機器）が接続されている場合にはＳ３にてＹｅｓに進み、接続されているハードウェアのドライバをロードする（Ｓ５）。
【００４８】
ハードウェアのドライバがロードされたときには、ＯＳ内部の構成は例えば図３のようになり、アプリケーションプログラムＡにて生成された送信データは、Ｗｉｎ３２サブシステム２１、ＩＯマネージャ２２を介してデバイスドライバ上位２３に渡され、デバイスドライバ下位２５として構成されるハードウェアのドライバがこの送信データを取得する。そして、このデバイスドライバ下位２６によってハードウェア２７（通信機器）に対する通信制御がなされる。
【００４９】
なお、ハードウェアのドライバを実行するＣＰＵ３は、「外部通信確認手段」の一例に相当し、通信ポート１４ａに通信機器が接続されている場合に、アプリケーションプログラムＡにて生成されたデータを、通信ポート１４ａを介してコンピュータ２の外部に送信することで、データの通信動作を確認するように機能する（例えば、アプリケーションプログラムＡにて生成されたデータを、通信ポート１４ａを介して他のパーソナルコンピュータ、携帯情報端末等の外部通信装置に送信し、データの通信動作を確認するように機能する）。なお、ハードウェアのドライバをロードしてハードウェアと通信を行う構成、或いはその通信動作についてのデバック等を行う構成については公知であるので詳細は省略する。
【００５０】
本実施形態では、ＣＰＵ３が「検出手段」の一例に相当し、通信機器が通信ポート１４ａに接続されているか否かを検出するように機能する。更に、Ｓ５の処理を実行するＣＰＵ３は、「選択手段」の一例に相当し、通信ポート１４ａにおいて通信機器の接続が検出されたことを条件として「外部通信確認手段」を選択するように機能する。
【００５１】
次に、図５を参照して通信ポートオープン処理について説明する。通信ポートオープン処理は、アプリケーションプログラムＡに割り当てられた通信ポート１４ａとアプリケーションプログラムＢに割り当てられた通信ポート１４ｂとをオープンする処理であり、上述の仮想ドライバに基づいて行われる。
【００５２】
この処理では、まず、設定値の取得処理が行われる（Ｓ１０）。Ｓ１０の処理では、通信動作確認を行おうとするアプリケーションプログラム（アプリケーションプログラムＡ）に割り当てられた通信ポート１４ａのポート番号をレジストリから読み出すと共に、その通信ポート１４ａの通信相手として設定されている通信ポート１４ｂのポート番号をレジストリから読み出す。そして、それら通信ポート番号とバッファとを関連付ける処理を行う（Ｓ１１）。Ｓ１１では、受信側で使用されるバッファ（受信バッファ）のメモリアドレスを取得し、通信ポート１４ｂと対応付けてＲＡＭ５に記憶する。更に、上記受信バッファと送信バッファ（送信側の通信ポート１４ａと対応付けられたバッファ（なお、送信バッファは省略可））とをクリアし（Ｓ１２）、内部状態をオープンに設定する（Ｓ１３）。なお、Ｓ１３の処理は、例えば通信ポート１４ａ及び通信ポート１４ｂがオープン状態であることを示すフラグを設定する。
【００５３】
次に、仮想ドライバによって行われるデータ送信処理について説明する。図6の処理は、アプリケーションプログラムＡの実行中にデータ送信の指示がなされることに基づいて開始される処理であり、まず、アプリケーションプログラムＡに割り当てられた通信ポート１４ａがオープン状態であるか否かを確認する（Ｓ２０）。通信ポート１４ａがオープン状態である場合には、Ｗｉｎ３２サブシステム２１、ＩＯマネージャ２２、デバイスドライバ２３を介し、デバイスドライバ下位２５（仮想ドライバ）に対してアプリケーションプログラムＡからの送信データが渡される（Ｓ２１）。仮想ドライバは、その取得した送信データを、アプリケーションプログラムＡの通信相手となるアプリケーションプログラムＢの受信バッファ（即ち、通信ポート１４ａの通信相手として設定された通信ポート１４ｂに対応付けられた受信バッファ）に書き込み（Ｓ２２）、通信相手の通信ポート１４ｂに対して受信通知を行う（Ｓ２３）。
【００５４】
一方、アプリケーションプログラムＢ側では図７のようなデータ受信処理が行われる。このデータ受信処理では、アプリケーションプログラムＢに割り当てられた通信ポート１４ｂがオープン状態であるか否かの確認がなされ（Ｓ３０）、オープン状態のときにはＳ３０にてＹｅｓに進み、受信通知の確認を行う（Ｓ３１）。Ｓ３１では、アプリケーションプログラムＢに割り当てられた通信ポート１４ｂに対して受信通知がなされたか否かの確認が行われ、Ｓ２３（図６）の受信通知がなされている場合にはＳ３１にてＹｅｓに進み、その受信イベントが上位に通知され、その通知に応じてアプリケーションプログラムＢが受信バッファに書き込まれたデータ（アプリケーションプログラムＡからの送信データ）を取得する（Ｓ３２）。アプリケーションプログラムＢが受信バッファに蓄積された送信データを取得した後には、受信バッファ内のデータは削除される。
【００５５】
なお、図５の処理によって設定された通信ポートのオープン状態は、ユーザによる所定操作、或いはコンピュータの起動終了時においてクローズ状態とされる。  
【００５６】
このように、仮想ドライバがロードされる場合（即ち、仮想通信確認手段が選択される場合）、アプリケーションプログラムＡ（一のアプリケーションプログラム）からアプリケーションプログラムＢ（他のアプリケーションプログラム）に対してデータの仮想的な送受信が行われ、その送受信結果に基づいてデータの通信動作の確認がなされる。通信動作の確認は、アプリケーションプログラムＡのデータがアプリケーションプログラムＢによって良好に取得されたか否か等、公知のデバック処理で用いられる様々な確認を行うことができる。
【００５７】
なお、ＣＰＵ３は、「仮想送受信手段」の一例に相当し、ポート情報に基づいて第１の通信ポートと対応する第２の通信ポートを特定すると共に、一のアプリケーションプログラムから第１の通信ポートに送られるべきデータを、第２の通信ポートが受信したデータとしてメモリに記憶し、且つ他のアプリケージョンプログラムに与えるように機能する。
【００５８】
（第１実施形態の主な効果）
本実施形態の構成によれば例えば以下のような効果を奏する。
上記実施形態では、アプリケーションプログラムＡとアプリケーションプログラムＢとの通信を仮想的に試行する「仮想通信確認手段」と、アプリケーションプログラムにて生成されたデータを、通信ポートを介してコンピュータの外部に送信してデータの通信動作を確認する「外部通信確認手段」とが設けられているため、状況に応じて仮想通信確認手段と外部通信確認手段とを使い分けることができ、通信動作をより適切な方法で確認できるようになる。例えば、通信ケーブルや外部装置を準備しにくい場合であっても、外部通信確認手段を用いずに仮想通信確認手段によって通信動作を確認でき、通信動作の確認作業やその準備の容易化が効果的に図られる。
【００５９】
また、アプリケーションプログラムＡに対し第１の通信ポートを割り当て、アプリケーションプログラムＢに対し第２の通信ポートを割り当て、それら第１の通信ポート及び第２の通信ポートを特定するポート情報をメモリに記憶しているため、アプリケーションプログラムＡに対応する送信ポートと、アプリケーションプログラムＢに対応する受信ポートとの対応関係を明確にすることができる。
【００６０】
更に、アプリケーションプログラムＡから第１の通信ポートに送られるべきデータが、第２の通信ポートが受信したデータとしてメモリに記憶され、更に、他のアプリケージョンプログラムに与えられるように構成されているため、実際に通信ケーブルを通信ポートに接続しなくても、アプリケーションプログラムＡからのデータを第１の通信ポートを介して送信するという送信状態の確認と、アプリケーションプログラムＢに対するデータを第２の通信ポートを介して受信するという受信状態の確認とを仮想的に実現でき、外部通信確認手段を用いない場合であっても通信動作の確認が良好に行われる。
【００６１】
また、通信機器が通信ポートに接続されているか否かを検出する「検出手段」が設けられており、「検出手段」により通信機器が検出されたことを条件として「外部通信確認手段」が選択されるように構成されている。このようにすると、「外部通信確認手段」による通信動作の確認が可能なときのみ「外部通信確認手段」が選択されるようになり、より適切な選択が可能となる。
【００６２】
また、「通信ポート割当手段」によって割り当てられた第１の通信ポートに通信機器が接続されているか否かを検出し、第１の通信ポートに通信機器が接続されている場合に「外部通信確認手段」を選択するように構成されている。このようにすると、一のアプリケーションシステムから外部への通信が可能な状態においては、「外部通信確認手段」を用いてより精度の高い通信動作確認が可能となる。
【００６３】
また、アプリケーションプログラムＡに割り当てる第１の通信ポートと、アプリケーションプログラムＢに割り当てる第２の通信ポートとが互いに異なる通信ポートとなるように設定している。このようにすると、「仮想通信確認手段」によって通信動作を確認するときに、第１の通信ポートと第２の通信ポートと区別して適切な動作確認を行うことができる。
【００６４】
[第２実施形態]
次に、本発明の通信システムの第２実施形態について図８〜図１３を参照して説明する。
図８は、第２実施形態に係る通信システムを概略的に説明する説明図である。図９は、アプリケーションプログラムによって実行される通信処理の流れを概略的に例示するフローチャートである。図１０は、通信ポートオープン時のＡＰＩフック処理を例示するフローチャートである。図１１（ａ）は、送信関連ＡＰＩが呼び出されたときのＡＰＩフック処理を例示するフローチャートであり、図１１（ｂ）は、受信関連ＡＰＩが呼び出されたときのＡＰＩフック処理を例示するフローチャートである。図１２は、通信ポートクローズ時のＡＰＩフック処理を例示するフローチャートである。図１３（ａ）は、各仮想ハンドルと正規のハンドルとの対応データを概念的に説明する説明図であり、図１３（ｂ）は、コンピュータ内の各アプリケーションプログラムに仮想ハンドルが割り当てられた状態を概念的に説明する説明図である。なお、図１３では、通信ポート１４ａ（図２）の正規ハンドルとしてハンドルＺが用いられ、通信ポート１４ａの仮想ハンドルとして、アプリケーションＡに仮想ハンドルＺ−１が割り当てられ、アプリケーションＢに仮想ハンドルＺ−２が割り当てられた例を示している。
【００６５】
なお、第２実施形態に係る通信システム２００で用いられるコンピュータ２０２は、ハードウェア構成については、第１実施形態で用いられるコンピュータ２と同一である。よって、コンピュータ２０２のハードウェア（ＣＰＵ３、ＲＯＭ４、ＲＡＭ５、ハードディスクドライブ６、出力部７、入力部８、通信部９、バス１１、通信インターフェース１３、通信ポート１４ａ〜１４ｃ等）については適宜図２を参照することとし、詳細な説明は省略する。
【００６６】
（第２実施形態の通信システムの概要）
図８に示すように、本実施形態に係る通信システム２００は、通信機器を接続可能な通信ポートと、メモリ（ＲＡＭ等）とを備えたコンピュータ２０２によって構成されている。本実施形態でも、第１実施形態と同様の通信部９（図２）が設けられ、通信インターフェース１３と、複数の通信ポート１４ａ〜１４ｃとを備えている。このコンピュータ２０２でも、各通信ポート１４ａ〜１４ｃ（図２）が、シリアルコネクタやパラレルコネクタとして構成されており、ＲＳ２３２ＣケーブルやＵＳＢケーブルなどの通信ケーブルを介して各種通信機器（例えば、他のコンピュータ、外部記憶装置、その他の情報処理装置等）が接続可能とされている。そして、各通信ポート１４ａ〜１４ｃ（図２）を介してこれらの通信機器（外部装置）と通信を行うことができるようになっている。なお、図８では、外部装置の例として携帯端末３００が示されている。
【００６７】
図８に示すように、コンピュータ２０２の内部には、複数のアプリケーションプログラム（以下、アプリケーションとも称する）やオペレーティングシステム（以下、ＯＳとも称する）２２０が格納されており、コンピュータ２０２は、ＯＳ２２０の制御の下、これらアプリケーションプログラムを実行することで、各種処理を行っている。なお、図８では、コンピュータ２０２で用いられる一部のアプリケーションプログラムＡ、Ｂ（図８では、アプリケーションＡ、Ｂと略称）を例示しており、これら以外のアプリケーションプログラムについては図示を省略している。
【００６８】
コンピュータ２０２で用いられるＯＳ２２０としては、例えば、Ｕｎｉｘ（登録商標）、Ｌｉｎｕｘ、マイクロソフト社のＷｉｎｄｏｗｓ（登録商標）、その他の任意のＯＳなどが挙げられる。なお、以下では、Ｗｉｎｄｏｗｓ（登録商標）のＮＴ系のＯＳが採用され、マイクロカーネル技術とオブジェクト指向技術をベースとし、各サービスを、サブシステムによって実装した構成を代表例として説明する。
【００６９】
ＯＳ２２０では、サブシステムが各アプリケーションプログラムＡ、Ｂ等に対して、各種のＡＰＩ（関数）を提供し、例えば、メモリ管理、プロセス管理、グラフィックス描画などを行うようになっている。このサブシステムでは、アプリケーションプログラムＡ、Ｂから、例えば、入出力関係のＡＰＩ関数が呼び出されると、そのＡＰＩ関数に応じた入出力要求を、ＩＯマネージャ（図示略）に出力する。また、ＯＳ２２０には、各種デバイスドライバが組み込まれるようになっており、図８では、ハードウェア（携帯端末に接続された通信ケーブル）が接続され、このハードウェアのデバイスドライバがロードされたときの構成を概念的に示している。
【００７０】
（第２実施形態の特徴的構成）
次に、本実施形態に係る通信システム２００の特徴的構成について説明する。
まず、アプリケーションプログラムによる通信処理について説明する。各アプリケーションプログラムは、所定の通信開始条件の成立（例えば、ユーザによる所定操作等）に応じて図９のような通信処理を実行するようになっており、この通信処理では、まず、通信ポートのオープン処理が行われる（Ｓ１）。このＳ１では、アプリケーションプログラムが通信ポートをオープンするためのＡＰＩ関数を呼び出す処理が行われる。例えば、Ｗｉｎｄｏｗｓ（登録商標）で用いられるＡＰＩ関数では、「CreateFile」関数が使用されており、Ｓ１では、この、「CreateFile」関数が、通信に使用する通信ポート対応付けられて呼び出される。
【００７１】
本実施形態では、アプリケーションプログラムから通信ポートをオープンするＡＰＩ関数（例えば、「CreateFile」関数）が呼び出されたとき、このＡＰＩ関数をそのままサブシステムによって実行するのではなく、図１０のように、ＡＰＩ関数をフックする処理を行っている。図１０の処理は、アプリケーションプログラムによって通信ポートをオープンするＡＰＩ関数が呼び出されたときに開始される処理であり、まず、Ｓ１１にて、通信処理で用いようとする通信ポートの呼び出しが初回であるか否かを判断している。
【００７２】
本実施形態では、各通信ポート毎に、アプリケーションプログラムによる「呼び出し回数」をカウントしている。この「呼び出し回数」は、各通信ポートにおける通信処理継続中（通信ポートのオープン継続中）のアプリケーション数を示す値であり、例えば、通信ポート１４ａ（ＣＯＭ１）を例に挙げると、各アプリケーションプログラムが当該通信ポート１４ａのオープンを要求する毎に（即ち、通信ポート１４ａについて図１０の処理が行われる毎に）当該通信ポート１４ａの「呼び出し回数」がインクリメントされるようになっている。また、各アプリケーションプログラムが当該通信ポート１４ａのクローズを要求する毎に（即ち、通信ポート１４ａについて図１２の処理が行われる毎に）、当該通信ポート１４ａの「呼び出し回数」がデクリメントされるようになっている。
【００７３】
このように各通信ポートごとに呼び出し回数がカウントされることを前提とし、Ｓ１１では、Ｓ１の処理によって指定された通信ポートの現在（Ｓ１１の処理実行時）の呼び出し回数が「０」であるか否かを判断している。例えば、図９のＳ１の処理で、通信ポート１４ａ（以下、ＣＯＭ１ともいう）を指定して、当該通信ポート１４ａ（ＣＯＭ１）をオープンするＡＰＩ関数が呼び出された場合、このＳ１の処理に応じて実行されるＳ１１の処理では、当該通信ポート１４ａ（ＣＯＭ１）の「呼び出し回数」が現在「０」であるか否かを判断する。
【００７４】
Ｓ１で指定された通信ポートについての「呼び出し回数」がＳ１１の処理時において「０」であり、今回の呼び出しが、当該通信ポートについての１回目の呼び出しとなるときには、Ｓ１１でＹｅｓに進み、Ｓ１で呼び出されたＡＰＩ関数（例えば、「CreateFile」関数）をＯＳ２２０にて実行し、Ｓ１で指定された通信ポートをオープンする（Ｓ１２）。このオープン処理では、Ｓ１で指定された通信ポートのハンドル（正規ハンドル）が公知の方法で取得され、その取得されたハンドル（正規ハンドル）がＲＡＭ等のメモリに保存される（Ｓ１３）。
【００７５】
なお、この「正規ハンドル」は、ＡＰＩ関数によって通信ポートを介して通信を行う際に実際に当該通信ポートでの通信に用いる公知のハンドルであり、当該通信ポートのオープン中は当該通信ポートに対して１つのみ設定されるようになっている。一方、後述する「仮想ハンドル」は、当該通信ポートについて各アプリケーションプログラム毎に設定される仮想的なハンドルであり、アプリケーションプログラムが当該通信ポートについて「仮想ハンドル」を取得したとしても、最終的にはこの「仮想ハンドル」を対応する「正規ハンドル」に変換し、「正規ハンドル」を用いて当該通信ポートでの通信を行うようになっている。なお、通信の詳細については後述する。
【００７６】
本実施形態では、図１０の処理や、後述する図１２の処理を実行するＣＰＵ３（図２）が、「呼び出し回数増減手段」の一例に相当し、各アプリケーションプログラムによる通信ポートの呼び出し回数をカウントすると共に、各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に呼び出し回数を減じるように機能する。
また、Ｓ１１（図１０）の処理を実行するＣＰＵ３は、「判断手段」の一例に相当し、アプリケーションプログラムが通信ポートを呼び出したときに、上記「呼び出し回数増減手段」による呼び出し回数が所定値以下か否かを判断するように機能する。
更に、ＣＰＵ３、メモリ（ＲＡＭ５等）が、「ハンドル保存手段」の一例に相当し、上記「判断手段」によって通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するように機能する。
【００７７】
一方、Ｓ１１の判断処理において、Ｓ１で指定された通信ポートの最初の呼び出しでないと判断された場合（即ち、Ｓ１の処理によって指定された通信ポートの現在（Ｓ１１の処理実行時）の呼び出し回数が「１」以上である場合）、Ｓ１１にてＮｏに進み、そのアプリケーションプログラムに割り当てるべき仮想ハンドルを生成する処理を行う（Ｓ１４）。
【００７８】
従来では、通信ポートが既に先のアプリケーションプログラムによって呼び出されてオープンされている場合、後からアクセスする他のアプリケーションプログラムによる当該通信ポートの使用が禁止され、他のアプリケーションプログラムは当該通信ポートのハンドルを使用できないという問題があった。しかし、本実施形態では、既に先のアプリケーションプログラムによって通信ポートがオープンされている場合であっても、他のアプリケーションプログラムによる当該通信ポートのオープン処理を排除せず、他のアプリケーションプログラムに対して仮想的なハンドルを割り当てることができるようになっている。
【００７９】
また、Ｓ１１でＹｅｓに進む場合も同様であり、Ｓ１３でハンドル（正規ハンドル）を保存した後、Ｓ１の処理を行ったアプリケーションプログラム（この場合、通信ポートの最初の呼び出しを行ったアプリケーションプログラム）に割り当てるべき仮想ハンドルを生成する処理を行う（Ｓ１４）。
【００８０】
このように、本実施形態では、通信ポートを最初に呼び出したアプリケーションプログラムにも、その後に通信ポートを呼び出したアプリケーションプログラムにも仮想ハンドルが設定されることとなる。
なお、本実施形態では、Ｓ１４（図１０）の処理を実行するＣＰＵ３が「仮想ハンドル設定手段」の一例に相当し、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、上記「ハンドル保存手段」によって保存されたハンドル（正規ハンドル）に対応した仮想ハンドルを設定するように機能する。
【００８１】
そして、Ｓ１４で生成された仮想ハンドルと、Ｓ１３で保存されたハンドル（正規ハンドル）との対応関係を示すデータ（対応データ）を保存する（Ｓ１５）。図１３（ａ）では、Ｓ１５で生成、保存される対応データの一例を示しており、例えば、通信ポート１４ａ（ＣＯＭ１）の最初の呼び出しの際にＳ１３にてハンドルＺ（正規ハンドル）が生成、保存され、この通信ポート１４ａ（ＣＯＭ１）の最初の呼び出しを行ったアプリケーションプログラムに対してＳ１４にて仮想ハンドルＺ−１が生成された場合、図１３（ａ）のように、仮想ハンドルＺ−１と正規のハンドルＺとを対応付けたデータを生成、保存する。このようにすることで、最初の呼び出しを行ったアプリケーションプログラムに対して仮想ハンドルＺ−１を割り当てることができ、且つ、この仮想ハンドルＺ−１に対応する正規ハンドル（ハンドルＺ）を特定できるようになる。
【００８２】
二回目以降の呼び出しでも同様であり、上記先のアプリケーションプログラムによる通信ポート１４ａのオープン中に、この通信ポート１４ａ（ＣＯＭ１）に対して他のアプリケーションプログラムが呼び出し（二回目の呼び出し）を行った場合、Ｓ１５の処理では、Ｓ１１でＮｏに進んでＳ１４で生成される仮想ハンドルＺ−２（図１３（ａ））と、当該通信ポート１４ａについて先のＳ１３の処理で既に生成されている正規のハンドルＺとを対応付けたデータを生成、保存する。このようにすることで、二回目の呼び出しを行ったアプリケーションプログラムに仮想ハンドルＺ−２を割り当てることができ、この仮想ハンドルＺ−２に対応する正規ハンドル（ハンドルＺ）を特定できるようになる。
【００８３】
なお、本実施形態では、Ｓ１５の処理を実行するＣＰＵ３及びメモリ（ＲＡＭ５等）が「対応データ保存手段」の一例に相当し、上記「ハンドル保存手段」によって保存されるハンドルと、「仮想ハンドル設定手段」によって各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存するように機能する。
【００８４】
Ｓ１５の処理の後には、呼び出し回数を更新する処理を行う（Ｓ１６）。この処理では、当該ＡＰＩフック処理で着目している通信ポート（即ち、Ｓ１で指定された通信ポート）についてのそれまでの「呼び出し回数」に「１」を加え、その値を当該通信ポートの新たな「呼び出し回数」として記憶する。例えば、通信ポート１４ａ（ＣＯＭ１）のオープンを要求するＡＰＩ関数に基づいて図１０のＡＰＩフック処理を行っており、当該ＡＰＩフック処理の開始時点で通信ポート１４ａの「呼び出し回数」が「０」の場合には、Ｓ１６の処理では、新たな「呼び出し回数」としてカウントアップされた「１」が記憶される。
【００８５】
Ｓ１６の後には、Ｓ１でオープン要求を行ったアプリケーションプログラムに対してＳ１４で得られた仮想ハンドルを返す処理を行う（Ｓ１７）。このような処理を行うことで、Ｓ１で通信ポートのオープン要求を行ったアプリケーションプログラムが、Ｓ１で指定された当該通信ポート用の仮想ハンドルを取得することができ、このアプリケーションプログラムが当該通信ポートで通信する際の固有の仮想ハンドルとしてメモリに記憶しておくことができる。
【００８６】
なお、図１３（ｂ）では、上記のようなオープン要求に対するＡＰＩフック処理が、アプリケーションＡ，Ｂそれぞれに対して実行された場合を例示している。図１３（ｂ）の例では、アプリケーションＡが先に図９の処理を行ってＳ１にて通信ポート１４ａ（ＣＯＭ１）をオープンするＡＰＩ要求を行い、図１０のＡＰＩフック処理によってこのアプリケーションＡに対し仮想ハンドルＺ−１が割り当てられている。そして、そのアプリケーションＡによるオープン中に、アプリケーションＢが図９の処理を行ってＳ１にて通信ポート１４ａ（ＣＯＭ１）をオープンするＡＰＩ要求を行い、図１０のＡＰＩフック処理によってこのアプリケーションＢに対して仮想ハンドルＺ−１が割り当てられている。このように、通信ポート１４ａを同時期にオープンしているアプリケーションＡ，Ｂのいずれもが、自身に割り当てられている仮想ハンドルを把握できるようになっており、更に、ＡＰＩフックプログラム側では、図１３（ａ）の対応データに基づいて各仮想ハンドルに対応する正規ハンドルを特定できるようになっている。
【００８７】
次に、図９のＳ２の通信処理について説明する。
上述したように、Ｓ１での通信ポートのオープン要求に応じ、図１０のＡＰＩフックプログラムによって当該通信ポートに対応する仮想ハンドルが割り当てられた後には、図９の処理を実行するアプリケーションプログラムによって当該通信ポートを使用した通信処理が行われる（Ｓ２）。この通信処理では、図９の処理を実行するアプリケーションプログラムによって通信関連のＡＰＩ関数を呼び出す処理が行われる。例えば、Ｗｉｎｄｏｗｓ（登録商標）で用いられるＡＰＩ関数では、通信ポートからデータを送信するＡＰＩ関数として、「WriteFile」関数を用いており、Ｓ１でオープンした通信ポートからデータ送信を行うときには、Ｓ２ではこの「WriteFile」関数が呼び出される。また、この「WriteFile」関数の呼び出しの際には、Ｓ１でオープン要求された通信ポートと対応付けられた仮想ハンドル（Ｓ１のオープン要求に対してＳ１７で返された仮想ハンドル）が指定される。例えば、図１３（ｂ）のようなアプリケーションＡが上述の通信ポート１４ａ（ＣＯＭ１）を使用してデータ送信を行う場合、通信ポート１４ａ用に設定されたアプリケーションＡ固有の仮想ハンドルＺ−１と、アプリケーションＡが送信しようとするデータ（送信データ）などを対応付けて「WriteFile」関数を呼び出す。
【００８８】
本実施形態では、Ｓ２にて通信ポートでの送信に関連する所定のＡＰＩ関数（上記例では、「WriteFile」関数）が呼び出されたときに、図１１（ａ）のようなＡＰＩフック処理が行われるようになっている。この処理では、呼び出された送信関連ＡＰＩ関数（例えば、「WriteFile」関数）の具体的内容を確認し（Ｓ２１）、仮想ハンドルを利用した送信が指示されているか否かを判断する（Ｓ２２）。具体的には、Ｓ２で呼び出された送信関連ＡＰＩ関数（例えば「WriteFile」関数）と対応付けられて仮想ハンドルが指定されているか否かをＳ２１にて確認し、仮想ハンドルが指定されていない場合には、Ｓ２２にてＮｏに進み、ＡＰＩ関数で指示された他の処理（例えば、ファイルへの書き込みなど）を行う（Ｓ２３）。
【００８９】
一方、Ｓ２で呼び出された送信関連ＡＰＩ関数に対応して仮想ハンドルが指定されている場合には、Ｓ２２にてＹｅｓに進み、その指定された仮想ハンドルに対応する正規ハンドルを用いて送信処理を行う。この送信処理では、まず、当該送信処理に先立ってＳ１５（図１０）で保存されている対応データ（例えば図１３（ａ））を参照し、Ｓ２で指定された仮想ハンドルに対応する正規ハンドルを読み出している。そして、読み出された正規ハンドルをＳ２で指定された仮想ハンドルに代えて用い、Ｓ２（図９）で呼び出された送信関連ＡＰＩ関数を実行する。これにより、Ｓ２の処理を実行するアプリケーションプログラムが、正規ハンドルを用いて送信関連ＡＰＩ関数（例えば「WriteFile」関数）を実行できるようになり、Ｓ１で指定された通信ポートから外部装置（携帯端末３００等）にデータ送信を行うことができる。
【００９０】
この構成では、例えば、携帯端末３００（外部装置）が、二次元コード等の情報コードを読み取り可能な携帯型のコードリーダとして構成される場合、或いは、携帯端末３００が、ＲＦＩＤタグなどを読み取り可能な無線タグリーダとして構成される場合などにおいて、当該携帯端末３００の複数のプログラムとコンピュータ２とが同一の通信ポートを使用して同時期に通信を行うことができるようになる。
【００９１】
例えば、図８のように、コンピュータ２のアプリケーションＡ（一のアプリケーションプログラム）が通信ポート１４ａ（ＣＯＭ１）を用いて携帯端末３００のアプリケーションプログラム（一のプログラム）と通信を行う際に、図１３（ａ）のような対応データに従い、図１３（ｂ）のようにアプリケーションＡに設定された仮想ハンドルＺ−１に対応するハンドルＺ（正規ハンドル）を使用してＡＰＩ通信を行うことができる。また、このようにアプリケーションＡ（一のアプリケーションプログラム）による通信ポート１４ａ（ＣＯＭ１）を用いた通信処理の継続中（アプリケーションＡによる通信ポート１４ａのオープン中）に、アプリケーションＢ（他のアプリケーションプログラム）が当該通信ポート１４ａ（ＣＯＭ１）を用いて携帯端末３００のサービスプログラム（他のプログラム）と通信を行う場合、アプリケーションＢに設定された仮想ハンドルＺ−２と対応データ（図１３（ａ））とに基づき、当該通信ポート１４ａに対応するハンドルＺ（正規ハンドル）を使用して通信を行うことができる。
【００９２】
なお、このような構成において、アプリケーションＡから携帯端末３００の所定のアプリケーションプログラムに対し、図９、図１１（ａ）のような送信処理を行う場合、図９のＳ２で呼び出される送信関連ＡＰＩ関数（例えば、「WriteFile」関数）と対応付けられた送信データ内に、例えば、携帯端末３００の所定のアプリケーションプログラムを特定する宛先データを含ませておけばよい。同様に、アプリケーションＢから携帯端末３００の所定のサービスプログラムに対し、図９、図１１（ａ）のような送信処理を行う場合、図９のＳ２で呼び出される送信関連ＡＰＩ関数（例えば、「WriteFile」関数）と対応付けられた送信データ内に、例えば、携帯端末３００の所定のサービスプログラムを特定する宛先データを含ませておけばよい。そして、携帯端末３００のドライバが、このような送信データから宛先データを読み取り、送信データを宛先データに応じたプログラムに振り分けるようにすればよい。
【００９３】
上記説明では、Ｓ２においてデータ送信が行われる例を示したが、Ｓ１でオープンされた通信ポートを利用したデータ受信も同様に行われる。以下、Ｓ２でデータ受信処理を行う場合について説明する。
【００９４】
Ｓ２にてデータ受信処理を行う場合でも、アプリケーションプログラムによって通信関連のＡＰＩ関数を呼び出す処理が行われる。例えば、Ｗｉｎｄｏｗｓ（登録商標）で用いられるＡＰＩ関数では、通信ポートからデータを受信するＡＰＩ関数として、「ReadFile」関数を用いており、Ｓ１でオープンした通信ポートからデータ受信を行うときには、この、「ReadFile」関数が呼び出される。また、この、「ReadFile」関数を呼び出す際には、Ｓ１でオープンされた通信ポートと対応付けられた仮想ハンドル（Ｓ１のオープン要求に応じてＳ１７で返された仮想ハンドル）が指定される。例えば、図１３（ｂ）のようなアプリケーションＡが上述の通信ポート１４ａ（ＣＯＭ１）を使用してデータ受信を行う場合、通信ポート１４ａ用に設定されたアプリケーションＡ固有の仮想ハンドルＺ−１と対応付けて「ReadFile」関数を呼び出す。
【００９５】
本実施形態では、上記のように、通信ポートでの受信に関連する所定のＡＰＩ関数（例えば、ReadFile）関数）が呼び出されたときに、図１１（ｂ）のようなＡＰＩフック処理が行われるようになっている。この処理では、呼び出された受信関連ＡＰＩ関数（例えば、「ReadFile」関数）の具体的内容を確認し（Ｓ３１）、仮想ハンドルを利用した受信が指示されているか否かを判断する（Ｓ３２）。具体的には、Ｓ２で呼び出された受信関連ＡＰＩ関数（例えば「ReadFile」関数）と対応付けられて仮想ハンドルが指定されているか否かをＳ３１にて確認し、仮想ハンドルが指定されていない場合には、Ｓ３２にてＮｏに進み、ＡＰＩ関数で指示された他の処理（例えば、ファイルの読み取りなど）を行う。
【００９６】
一方、仮想ハンドルが指定されている場合には、Ｓ３２にてＹｅｓに進み、仮想ハンドルに対応する正規ハンドルを用いて受信処理を行う（Ｓ３４）。この処理では、まず、当該受信処理に先立ってＳ１５（図１０）で保存されている対応データ（図１３（ａ））に基づき、Ｓ２（図９）で呼び出された受信関連ＡＰＩ関数で指定される仮想ハンドルに対応する正規ハンドルを読み出している。そして、その読み出された正規ハンドルをＳ２で指定されていた仮想ハンドルに代えて用い、Ｓ２（図９）で呼び出された受信関連ＡＰＩ関数を実行する。これにより、Ｓ２の処理を実行するアプリケーションプログラムが、正規ハンドルを用いて受信関連ＡＰＩ関数（例えば「ReadFile」関数）を実行できるようになり、Ｓ１で指定された通信ポートを介して外部装置（携帯端末３００等）からデータ受信を行うことができる。
【００９７】
なお、この場合、外部装置（例えば携帯端末３００等）の各プログラムがコンピュータ２の各アプリケーションに送信する送信データ内に、当該送信データの送信先となるアプリケーションプログラムを示す宛先データを含ませるようにすればよい。そして、コンピュータ２側では、上記受信処理（Ｓ２：図９）によって受信を行おうとするアプリケーションプログラムが、当該アプリケーションプログラムを指定する宛先データを含んだデータのみを有効なものとして読み込むようにすれば、同一の通信ポートから受信する各アプリケーソンプログラム宛の各受信データを、各アプリケーションプログラムに適切に振り分けることができるようになる。
【００９８】
なお、本実施形態では、Ｓ２２或いはＳ３２の処理を実行するＣＰＵ３（図３）が「仮想ハンドル利用確認手段」の一例に相当し、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認するように機能する。
また、Ｓ２４、Ｓ３４の処理を実行するＣＰＵ３は、「通信制御手段」の一例に相当し、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、「対応データ保存手段」に保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル（正規ハンドル）を使用するように機能すると共に、上記「仮想ハンドル利用確認手段」によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル（正規ハンドル）を使用するように機能している。
【００９９】
次に、図９のＳ３の通信ポートクローズ処理について説明する。
図９の処理を実行するアプリケーションプログラムは、Ｓ２の通信処理が終了した後に、Ｓ１でオープンした通信ポートをクローズする処理を行っている（Ｓ３）。このＳ３では、アプリケーションプログラムが通信ポートをクローズするためのＡＰＩ関数を呼び出す処理が行われる。例えば、Ｗｉｎｄｏｗｓ（登録商標）で用いられるＡＰＩ関数では、「CloseHandle」関数が使用されており、Ｓ３では、この、「CloseHandle」関数が、クローズしようとする通信ポート（Ｓ１でオープンされた通信ポート）の仮想ハンドル（Ｓ１のオープン要求に応じてＳ１７で返された仮想ハンドル）と対応付けて呼び出される。
【０１００】
本実施形態では、アプリケーションプログラムから通信ポートをオープンするＡＰＩ関数（例えば、「CloseHandle」関数）が呼び出されたとき、図１２のように、ＡＰＩ関数をフックする処理を行っている。図１２の処理は、アプリケーションプログラムによって通信ポートをクローズするＡＰＩ関数（例えば、「CloseHandle」関数）が呼び出されたときに開始される処理であり、まず、Ｓ３でのクローズ要求で指定された仮想ハンドルと正規ハンドルとの対応データを破棄している（Ｓ４１）。この処理では、図１３（ａ）のような対応データの中から、Ｓ３で指定された仮想ハンドルについてのデータを削除しており、例えば、図１３（ｂ）に示すアプリケーションＡがＳ３（図９）において仮想ハンドルＺ−１を指定してクローズ要求（クローズ関連ＡＰＩ関数の呼び出し）をしているような場合には、図１３（ａ）の対応データの中からこの仮想ハンドルＺ−１と正規ハンドルＺとを対応付けたデータを削除する。
【０１０１】
Ｓ４１の処理の後には、着目している通信ポート（即ち、Ｓ３でクローズ要求がなさている通信ポート）の「呼び出し回数」をデクリメントする。例えば、アプリケーションＡによる通信ポート１４ａのクローズ要求に応じて図１２の処理がなされており、当該図１２のＡＰＩフック処理開始時点で通信ポート１４ａの「呼び出し回数」が「３」である場合、Ｓ４２ではこの値をデクリメントして「呼び出し回数」を「２」に変更する。
【０１０２】
そして、Ｓ４１で対応値を削除した仮想ポートが着目している通信ポート（即ち、Ｓ３でクローズ要求がなさている通信ポート）の最後の仮想ハンドルであるか否かを判断する（Ｓ４３）。具体的には、Ｓ４２の処理後において当該通信ポートの「呼び出し回数」が「０」となっているか否かを判断し、「０」でない場合、着目している当該通信ポートの呼び出しを行っているアプリケーションプログラムがまだ存在することを意味し、Ｓ４１で対応値を削除した仮想ポートが当該通信ポートの最後の仮想ハンドルではないため、Ｓ４３にてＮｏに進み、当該処理を終了する。
【０１０３】
一方、Ｓ４２の処理後において当該通信ポートの「呼び出し回数」が「０」である場合、着目している当該通信ポートの呼び出しを行っているアプリケーションプログラムが存在せず、Ｓ４１で対応値を削除した仮想ポートが当該通信ポートの最後の仮想ハンドルであるため、Ｓ４３にてＹｅｓに進む。Ｓ４３にてＹｅｓに進む場合には、当該通信ポートの正規ハンドルを指定してクローズ関連ＡＰＩ（例えば、「CloseHandle」関数）を実行し、当該通信ポートの正規ハンドルを削除する（Ｓ４４）。
【０１０４】
本実施形態では、Ｓ４１の処理を実行するＣＰＵ３が「対応値破棄手段」の一例に相当し、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、上記「対応データ保存手段」によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドル（正規ハンドル）との対応値を破棄するように機能する。
【０１０５】
（第２実施形態の主な効果）
第２実施形態に係る通信システム２００では、「呼び出し回数増減手段」によってアプリケーションプログラムによる通信ポートの呼び出し回数を管理しており、アプリケーションプログラムが通信ポートを呼び出したときに、「呼び出し回数増減手段」によって管理される呼び出し回数が所定値以下か否かを判断している。そして、その通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドル（正規ハンドル）を保存している。
このようにすると、通信ポートに対するアプリケーションプログラムの呼び出しがどの程度重複しているかを確認できる。また、呼び出し回数が少ないときに、当該通信ポートで通信を行うためにハンドル（正規ハンドル）を予め保存しておくことができる。
更に、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、上記「ハンドル保存手段」によって保存されたハンドルに対応した仮想ハンドルを設定し、この設定された仮想ハンドルと、既に保存されているハンドル（正規ハンドル）との対応データを保存している。そして、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル（正規ハンドル）を使用している。
このようにすると、複数のアプリケーションプログラムが同じ通信ポートを呼び出した場合に、各アプリケーションプログラムに仮想ハンドルを割り当てることができ、各アプリケーションプログラムは対応データを拠り所として仮想ハンドルと対応する実際のハンドルを使用し、当該通信ポートでの通信を行うことができるようになる。従って、最初に通信ポートを呼び出したアプリケーションプログラムだけに当該通信ポートを占有させて他のアプリケーションプログラムによる当該通信ポートへのアクセスを排除するといった対応を行う必要がなく、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができるようになる。
【０１０６】
また、第２実施形態の通信システム２００では、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認する「仮想ハンドル利用確認手段」を備え、この「仮想ハンドル利用確認手段」によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル（正規ハンドル）を使用している。
このようにすると、特定の通信関連コマンドが実行されたことをトリガとして仮想ハンドルを用いた通信を行うことができるようになる。その際、仮想ハンドルを用いた通信を行うか否かの確認を行った上で、通信処理に移行しているため、特定の通信関連コマンドで他の処理を実行する場合（即ち、仮想ハンドルを用いた通信を行わない例外ケース）にも対応しやすくなる。
【０１０７】
また、第２実施形態の通信システム２００では、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、上記「対応データ保存手段」によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドル（正規ハンドル）との対応値を破棄する「対応値破棄手段」を備えている。このようにすると、通信処理が終了して不要になった仮想ハンドルを削除することができ、対応データを常に適切な状態に維持できるようになる。
【０１０８】
更に、第２実施形態の通信システム２００では、外部装置が、コンピュータ２との間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末３００として構成されている。そして、コンピュータ２の複数のアプリケーションプログラムのうち、アプリケーションＡ（一のアプリケーションプログラム）が通信ポートを用いて携帯端末３００のアプリケーションプログラム（一のプログラム）と通信を行う際に、上記「対応データ保存手段」に保存された対応データに従い、アプリケーションＡ（一のアプリケーションプログラム）に設定された仮想ハンドルＺ−１に対応するハンドルＺを使用している。また、アプリケーションＡ（一のアプリケーションプログラム）による通信ポートを用いた通信処理の継続中（アプリケーションＡによる当該通信ポートのオープン中）に、アプリケーションＢ（他のアプリケーションプログラム）が当該通信ポートを用いて携帯端末３００のサービスプログラム（他のプログラム）と通信を行う場合、アプリケーションＢ（他のアプリケーションプログラム）に設定された仮想ハンドルＺ−２と対応データとに基づき、当該通信ポートに対応するハンドルＺを使用している。
このようにすると、コンピュータ２に記憶されたいずれかのアプリケーションプログラムが通信ポートを介して携帯端末３００のいずれかのプログラムと通信処理を行っている際に、コンピュータ２の他のアプリケーションプログラムが同じ通信ポートを用いて携帯端末３００の他のプログラムと通信処理を行うことができるようになる。従って、通信ポートが制約されやすい携帯端末３００との通信であっても、複数のアプリケーションプログラムが同一の通信ポートを使用して同時期に通信を行うことができるようになり、ひいては、コンピュータ２と携帯端末３００との間で多様な処理が実現可能となる。
【０１０９】
［他の実施形態]
本発明は上記記述及び図面によって説明した実施形態に限定されるものではなく、例えば次のような実施形態も本発明の技術的範囲に含まれる。
【０１１０】
第１実施形態では、アプリケーションプログラムＡに割り当てられた通信ポート１４ａ（第１の通信ポート）に何らかの通信機器が接続されている場合に「外部通信確認手段」を選択する構成としているが、通信ポート１４ａに特定種類の通信機器が接続されているか否かを検出し、特定種類の通信機器が検出された場合にのみ「外部通信確認手段」を選択する構成としてもよい。例えば、通信ポート１４ａにパーソナルコンピュータが接続されている場合のみ、或いは通信ポート１４ａに特定種類の携帯情報端末が接続されている場合のみ、Ｓ３（図４）にてＹｅｓに進みＳ５の処理を行うようにしてもよい。このようにすると、通信動作確認の対象となる特定種類の通信機器が接続されたとき以外で外部通信確認手段が選択されることがなく、より一層適切な選択が可能となる。
【０１１１】
第１実施形態の構成において、「仮想通信確認手段」に対して命令を与える上位プログラムからの設定変更命令に基づき、アプリケーションプログラムＢに割り当てる第２の通信ポートを設定変更する「設定変更手段」を付加してもよい。例えば、Ｓ１（図４）でアプリケーションプログラムＢに割り当てられた通信ポート１４ｂを、上位プログラム（仮想ドライバの上位にあるいずれかのプログラム）からの設定変更命令に基づいて設定変更できるようにしてもよい。
このようにすると、アプリケーションプログラムＢに割り当てる通信ポートを必要に応じて変更できる。なお、「設定変更命令」としては、ユーザによる指示に基づいてＳ１のような設定値取得処理を再度行わせる命令などが挙げられる。
また、このような構成において、「仮想送受信手段」による仮想的な送受信中（例えば、図６、図７の処理が行われている時）に上位プログラムから上記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、「設定変更手段」による第２の通信ポートの設定変更を中止するように構成できる。このようにすると、第２の通信ポートを必要に応じて設定変更できるようにしつつ、その設定変更によって仮想的な動作確認が強制的に中断されることを効果的に防止できる。
【０１１２】
第１実施形態では、通信動作確認を行おうとするアプリケーションプログラムに割り当てられた通信ポートにハードウェアが接続されている場合に強制的にハードウェアのドライバをロードしていたが、このような場合、ユーザに対し、いずれを採用するか（即ち、ハードウェアを用いずに仮想的な通信動作確認を行うか、それともハードウェアを用いた外部通信動作確認を行うか）を確認し、ユーザの指示に応じた通信動作確認方法を用いるようにしてもよい。
【０１１３】
第１実施形態では、アプリケーションプログラムＡからアプリケーションプログラムＢに対しデータを送信して仮想的な動作確認を行う例を説明したが、データだけでなく制御信号を送信してもよい。例えば、アプリケーションプログラムＡからの各制御信号をアプリケーションプログラムＢの受信バッファにそれぞれ記憶するように構成し、その制御信号の変更状態をアプリケーションプログラムＢ側で検出できるようにしてもよい。
【符号の説明】
【０１１４】
１…通信システム
２…コンピュータ
３…ＣＰＵ（通信動作確認手段，仮想通信確認手段，外部通信確認手段，選択手段，通信ポート割当手段，仮想送受信手段，検出手段、設定変更手段、呼び出し回数増減手段、判断手段、ハンドル保存手段、仮想ハンドル設定手段、通信制御手段、仮想ハンドル利用確認手段、対応値破棄手段）
５…ＲＡＭ（メモリ、ハンドル保存手段、対応データ保存手段）
１４ａ，１４ｂ，１４ｃ…通信ポート
３００…携帯端末（外部装置、通信機器）
【図１】
2010097603.tif 000003
【図２】
2010097603.tif 000004
【図３】
2010097603.tif 000005
【図４】
2010097603.tif 000006
【図５】
2010097603.tif 000007
【図６】
2010097603.tif 000008
【図７】
2010097603.tif 000009
【図８】
2010097603.tif 000010
【図９】
2010097603.tif 000011
【図１０】
2010097603.tif 000012
【図１１】
2010097603.tif 000013
【図１２】
2010097603.tif 000014
【図１３】
2010097603.tif 000015