(57)【特許請求の範囲】
【請求項１】
複数種類のデバイスを制御可能なアプリケーションプログラムに対し前記デバイスの種類毎のインターフェイスを提供する第１のオブジェクトと、この第１のオブジェクトに対し前記デバイス単位のインターフェイスを提供する第２のオブジェクトとを有し、これらのオブジェクトが、当該オブジェクトにより複数の処理が実行される際に、１または複数の前記処理毎にＣＯＭ（コンポーネントオブジェクトモデル）を使用可能なオペレーティングシステムの下で動作する制御システムであって、前記第２のオブジェクトは、当該第２のオブジェクトを呼んだ前記第１のオブジェクトが属する実行環境に生成されるように前記オペレーティングシステムのレジストリにＳＴＡ（シングルスレッドアパートメント）として登録されていることを特徴とする制御システム。
【請求項２】
請求項１において、前記実行環境は、前記第１のオブジェクト単位で生成される制御システム。
【請求項３】
請求項１において、前記第１のオブジェクトはパーソナルコンピュータの周辺機器の種類毎に提供されるコントロールオブジェクトであり、前記第２のオブジェクトは前記周辺機器毎に提供されるサービスオブジェクトである制御システム。
【請求項４】
請求項１において、前記アプリケーションプログラムはＰＯＳアプリケーションプログラムである制御システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンポーネント化されたオブジェクトを用いた制御システムに関するものである。
【０００２】
【従来の技術】
オブジェクト指向プログラミングによるコンポーネントベースのプログラムあるいはソフトウェア（以降においてはオブジェクト）は、オペレーティングシステム上で稼動する再利用可能なソフトウェアであり、オブジェクトを用いて多種多様なシステムが開発されている。たとえば、マイクロソフト社が提供するオペレーティングシステム（ＯＳ）であるウィンドウズ（登録商標）でサポートするＣＯＭ（コンポーネントオブジェクトモデル：Component Object Model）は、クライアントであるアプリケーションプログラム（コンテナアプリケーション）がオブジェクトを使用可能とする環境を提供する広範囲な機能を有するオペレーティングシステムである。
【０００３】
したがって、ＣＯＭで利用可能なオブジェクトによりシステム開発を行うと、ソフトウェアの部品化と再利用が容易になり、ユーザーがシステムを構築し、メンテナンスしていく費用を低減できる。また、既存のソフトウェア資産を継続あるいは承継できるので、システム開発も容易となり、それに伴う費用も削減できる。さらに、コンポーネントベースでオブジェクトが開発できるので、多種多様なサブシステムあるいは周辺装置により構成される複雑な構成のシステムの開発も容易になり、ネットワーク環境下で稼動するシステムの開発には欠かせないものとなっている。
【０００４】
ＰＯＳシステムは多種多様な周辺装置により組み立てられるシステムの１つであり、パーソナルコンピュータなどの中心となるホストコンピュータにディスプレイ、プリンタ、スキャナ、ドロワ、カードリーダなど様々な入出力装置が接続されることによりシステムが構築される。本願出願人は、特開平９−１０６３５５号などにより、オブジェクトを用い構築されたＰＯＳシステムであってパーソナルコンピュータベースのフレキシブルな構成のＰＯＳシステムについて開示している。
【０００５】
図１に、オブジェクト分散型のＰＯＳシステム１０の概要を示してある。このＰＯＳシステム１０は、各メーカが提供するＰＯＳアプリケーションプログラム１１と、プリンタ２１、スキャナ２２あるいはドロワ２３などの周辺装置（デバイス）の種類単位（デバイスクラス単位）に供給されるコントロールオブジェクト１２と、周辺装置毎、すなわち、デバイス毎に供給されるサービスオブジェクト１３とを備えている。したがって、ＰＯＳアプリケーションプログラム１１がプリンタ２１から出力するときは、データがプリンタのコントロールオブジェクト（ＣＯ）１２に渡され、さらに、出力するプリンタのメーカおよび機種に対応したサービスオブジェクト（ＳＯ）１３に渡され、ＯＳ１４を介してプリンタ２１に供給される。また、ＰＯＳアプリケーションプログラム１１は、ＯＳ１４を介してパーソナルコンピュータのハードウェア資源であるディスプレイ１５やキーボード１６も周辺装置として使用できるようになっている。
【０００６】
図１に示したＰＯＳシステム１０では、コントロールオブジェクト１２およびサービスオブジェクト１３を備えたオブジェクト制御システム１９がＰＯＳアプリケーションプログラム１１に対してプリンタ２１などの周辺機器に対して機種依存性のないインターフェイスを提供する。また、コントロールオブジェクト１３は周辺機器のデバイスクラス毎に開発されているので、その範囲でプログラム１１を実行するときにＯＳ１４にサポートされているＣＯＭによりインスタンスが形成され、プログラム１１にバインドされる。さらに、サービスオブジェクト１３はデバイス毎にコントロールオブジェクト１２に対してデバイスに依存しないユニフォームなインターフェイスを提供しており、対応するデバイスがコントロールオブジェクト１２を介して呼ばれるとインスタンスが形成されてバインドされる。たとえば、マイクロソフト社のＣＯＭを基盤とするシステムであれば、コントロールオブジェクト１２としてはプログラム１１にイベントを返すことが可能なＡｃｔｉｖｅＸコントロール（ＯＬＥコントロール）を採用でき、サービスオブジェクト１３としてはＡｃｔｉｖｅＸコントロールに対してサーバとなるＡｃｔｉｖｅＸサーバ（ＯＬＥオートメーションサーバ）を採用できる。そして、オートメーションによりバインディングされたこれらのオブジェクト間、すなわちアプリケーションを実行するためにバインドされたオブジェクトのインスタンス間のデータ通信をＣＯＭがサポートしている。
【０００７】
【発明が解決しようとする課題】
上記のようなＰＯＳシステム１０において、処理速度を向上することは常に要求されている。入力または出力を行うデバイスを利用した処理を実行するアプリケーションにおいては、入出力デバイスにおいてデータの入出力を行っている間にＣＰＵで他の処理を実行することにより処理効率を向上し、実行時間を短縮することができる。このような制御方法はマルチタスクあるいはマルチスレッドなど様々な名称で呼ばれている。マイクロソフト社のＣＯＭを基盤とするシステムでは、マルチスレッドと呼ばれる処理がサポートされている。この場合のスレッドとは、メモリのアドレス空間やその他の様々なリソースを所有する１つのプロセスに含まれる処理であって、スケジューラが独立してスケジューリングできるステップの集合ということができる。したがって、スケジューラが複数のスレッドをプロセッサの稼動状態に合わせて切り替えて（割り込んで）実行することによりプロセッサを効率良く利用でき、アプリケーションプログラム全体の処理速度を向上することができる。
【０００８】
異なるスレッドを実行する制御方法をマルチスレッドと呼び、１つのスレッドだけを実行する制御方法をシングルスレッドと呼ぶが、マルチスレッドを実行するためにデータのロードストアを行うなどのオペレーティングシステム（ＯＳ）による処理が必要となる。このため、ＯＳの処理時間がオーバーヘッドとなるが、データの入出力処理が多い場合にはプロセッサの空き時間で他のスレッドを実行できるために入出力処理が多いアプリケーションプログラムでは全体の処理時間を短縮するために非常に有用な制御方法である。したがって、上述したＰＯＳシステムのように多数の周辺処理装置を制御するアプリケーションプログラムの処理速度を向上するのに好適である。しかしながら、マルチスレッドを実行する環境ではプロセッサが実行するスレッドがスケジューラによって任意に切り替えられ、切り替えられるときに個々のスレッドの進行状況が他のスレッドに切り替えるのに適している状態であることは保証されない。また、割り込みがあって無効になったデータを次のスレッドが読み込むことも考えられる。したがって、上記のＰＯＳシステム１０をマルチスレッド環境で動作するようにするには、アプリケーションプログラム、コントロールオブジェクトおよびサービスオブジェクトで共有リソース（複数のスレッドからアクセスされるデータ）をロックするなど、マルチスレッドに対応するように開発する必要があり、時間と費用がかかる。
【０００９】
これに対し、ＣＯＭではアパートメントという概念を導入し、マルチスレッド環境で呼び出されるオブジェクトをシングルスレッドで制御できるようにするシングルスレッドアパートメント（ＳＴＡ）を利用することにより、マルチスレッド環境での動作を保証することができる。ＣＯＭのシングルスレッドアパートメントとは、アパートメント内に含まれるオブジェクト（ＣＯＭオブジェクト）の呼び出しを、呼び出しスタックにシリアルに蓄積して、呼び出しスタックから呼び出し情報を取り出して、オブジェクトを呼び出す概念である。したがって、シングルスレッドアパートメント（ＳＴＡ）内に含まれるオブジェクトはオブジェクトを呼び出すスレッドに関係なく、1つのスレッドでのみ実行される。このため、シングルスレッドアパートメント（ＳＴＡ）を用いれば、マルチスレッドに対応しないオブジェクトであってもＣＯＭにサポートされて同時実行が発生する可能性がなく、正常に動作する。
【００１０】
したがって、上記のＰＯＳアプリケーションプログラム１１にユニフォームなインターフェイスを提供するオブジェクト制御システム１９において、このシステムを構成する複数のオブジェクトが、シングルスレッドアパートメント（ＳＴＡ）で複数の処理（スレッド）を実行できるようにすることにより、プログラム開発にかかる費用および時間を抑えてマルチスレッド処理でＰＯＳアプリケーションを実行することが可能となり、処理時間を短縮することができる。シングルスレッドアパートメント（ＳＴＡ）に対応しても、オブジェクト制御システムは、同時に、ＣＯＭのアパートメントという概念に対応していない従来のオブジェクトと同様のサービスを提供できるものである必要がある。しかしながら、あるアパートメントから異なるアパートメント内に含まれるオブジェクトを呼び出すことはできない。これは、アパートメント内のオブジェクトを呼び出すために必要なインターフェイスポインタが異なるアパートメントでは無効であるためである。アプリケーションがシングルスレッドアパートメント（ＳＴＡ）に対応した第１のオブジェクトをアプリケーションで作成した２つ目以降のアパートメント内に作成した場合、シングルスレッドアパートメント（ＳＴＡ）に対応していない第２のオブジェクトは第１のオブジェクトと異なるアパートメント内に含まれる。この場合、第２のオブジェクトとは第１のオブジェクトを呼び出すために、第１のオブジェクトのインターフェイスポインタをあらかじめ取得しているが、このインターフェイスポインタが異なるアパートメント間では無効であるため、第２のオブジェクトは第１のオブジェクトを呼び出すことができない。
【００１１】
そこで、本発明においては、ＰＯＳシステムなどの多数のデバイスを使用するアプリケーションプログラムで、アパートメントに対応したオブジェクトを使用する際に、どのアパートメント内にオブジェクトを作成しても実行できる制御システムを提供することを目的とする。
【００１２】
【課題を解決するための手段】
このため、本発明においては、複数種類のデバイスを制御可能なアプリケーションプログラムに対しデバイスの種類毎のインターフェイスを提供する第１のオブジェクトと、この第１のオブジェクトに対しデバイス単位のインターフェイスを提供する第２のオブジェクトとを有し、これらのオブジェクトが、当該オブジェクトにより複数の処理が実行される際に、１または複数の処理毎にＣＯＭ（コンポーネントオブジェクトモデル）を使用可能なオペレーティングシステムの下で動作する制御システムであって、第２のオブジェクトが、当該第２のオブジェクトを呼んだ第１のオブジェクトが属する実行環境に生成されるようにオペレーティングシステムのレジストリにＳＴＡ（シングルスレッドアパートメント）として登録されている制御システムを提供する。本発明の制御システムであれば、これらのオブジェクトにより複数の処理、すなわちマイクロソフト社のＣＯＭにおけるスレッドが実行される際に、１または複数のスレッド毎に直接的な相互作用が発生しない実行環境、すなわちアパートメントを提供可能なオペレーティングシステムの下で動作させる工程を有する制御方法において、第２のオブジェクトを、第２のオブジェクトを呼んだ第１のオブジェクトが属するアパートメントに生成することができる。
【００１３】
したがって、第１のオブジェクトが、アプリケーションが最初に作成するアパートメントと異なるアパートメントに作成される場合でも、第１のオブジェクトが属するアパートメントに第２のオブジェクトを生成できるので、第１および第２のオブジェクトにより所望のプロセスを実行することができる。このケースでは、アプリケーションプログラムのＧＵＩ（Graphic UserInterface）スレッドと異なるアパートメントスレッドに、第１のオブジェクトと第２のオブジェクトが生成されて実行されるため、第１のオブジェクトからイベントが発生した場合のアプリケーションの処理もＧＵＩスレッド以外のスレッドで行われ、第１のオブジェクトと第２のオブジェクトの全ての処理をＧＵＩスレッド以外で処理することが可能であり、プロセッサを有効活用することができる。 このように、本発明の制御システムでは、アプリケーションのＧＵＩスレッドと異なるアパートメントスレッドに第１および第２のオブジェクトを属させることが可能となり、これらのオブジェクトをマルチスレッドで実行することにより、アプリケーションプログラムの全体的な処理速度を改善できる。
【００１４】
特に、実行環境、すなわちアパートメントが、第１のオブジェクト単位、たとえば、第１のオブジェクト毎に生成されるようにすれば、第１のオブジェクトがインターフェイスを提供するデバイスの種類毎に独立して実行可能なスレッドをアパートメントを利用して生成することができる。
【００１５】
このように、本発明の制御システムにおいては、デバイスの種類毎にインターフェイスを提供する第１のオブジェクトとデバイス単位でインターフェイスを提供する第２のオブジェクトを同一のアパートメントに属するように生成することにより、効果的にプロセッサを使用可能な複数のスレッドを形成できる。このため、アプリケーションプログラムを高速で実行可能であると共に信頼性が高く、さらに汎用性も高い制御システムを提供できる。また、第１のオブジェクトと第２のオブジェクトのインターフェイスを変更することなく機能を実現できるため、サードパーティが作成したオブジェクトと組み合わせて使用することも可能である。
【００１６】
本発明の制御システムを構築するためには、第２のオブジェクトをオペレーティングシステムに登録する工程において、第２のオブジェクトを、当該第２のオブジェクトを呼んだ前記第１のオブジェクトが属する実行環境に生成されるようにオペレーティングシステムのレジストリにＳＴＡとして登録することが必要となる。マイクロソフト社が提供するＣＯＭをサポートするＯＳではオブジェクトを登録するためのレジストリが用意されており、第２のオブジェクトをインストールするときに、シングルスレッディングアパートメントタイプとして登録することが望ましい。オブジェクトがレジストリに自己登録する処理を実行可能な命令を備えている場合は、登録する際に、シングルスレッディングアパートメントタイプとして登録し、当該第２のオブジェクトを呼んだ第１のオブジェクトが属するアパートメントに生成されるように登録することが望ましい。そのような自己登録機能を備えたオブジェクトは、コンピュータで読み取り可能なＣＤ−ＲＯＭなどの適当な記録媒体に記録して提供することができる。
【００１７】
第１および第２のオブジェクトによりインターフェイスを提供するデバイスは、コンピュータに内蔵されるデバイスであっても、ネットワークにより接続される他のコンピュータであっても良い。デバイス毎にインターフェイスが異なるパーソナルコンピュータの周辺機器を有するシステムに、本発明の制御システムを適用すると、周辺装置単位でインターフェイスが異なる場合であってもアプリケーションプログラムに対して機種依存性のないユニフォームなインターフェイスを提供できる。第１のオブジェクトとしては周辺機器の種類毎に提供されるコントロールオブジェクトを採用でき、第２のオブジェクトとしては周辺機器毎に提供されるサービスオブジェクトを採用できる。そして、これらのオブジェクトによる制御システムは、機種依存性のないインターフェイスを提供できるので、ＰＯＳアプリケーションプログラムなどの多種多様な入出力機器を制御する可能性のあるアプリケーションプログラムの制御システムに適している。
【００１８】
【発明の実施の形態】
以下では、図１に基づき説明した分散型オブジェクトで構築されるＰＯＳシステムに基づき本発明についてさらに説明する。図２に、ＰＯＳシステムを本発明に基づいたシステムでＣＯＭのスレッドモデルを適用した状態を模式的に示してある。本例のＰＯＳシステム３０では、アプリケーションプロセス１１内にアパートメントが２つ形成されており、アパートメント５１にスキャナというデバイスの種類単位のインターフェイスを提供するコントロールオブジェクト１２ｂとスキャナ２２に機種別に対応したインターフェイスを提供するサービスオブジェクト１３ｂが属している。一方、アパートメント５２には、プリンタというデバイスの種類単位のインターフェイスを提供するコントロールオブジェクト（ＣＯ）１２ａと、プリンタ２１に機種別に対応したインターフェイスを提供するサービスオブジェクト（ＳＯ）１３ａが属している。したがって、アプリケーションプログラム１１には、これらのオブジェクト１２ａ、１２ｂ、１３ａおよび１３ｂによりプリンタ２１およびスキャナ２２に対するインターフェイスが提供されており、アプリケーションプログラム１１は、ＯＳ１４を介してプリンタ２１およびスキャナ２２を使用して処理を実行することができる。ディスプレイ１５およびキーボード１６などデバイスに対しては、ＰＯＳシステム用にサポートされているオブジェクトを用いずにＯＳ１４を介してデータを入出力することができる。
【００１９】
上述したように、異なるアパートメント５１および５２では、シリアライズされたＣＯＭ呼び出しを取り出すメッセイループ５３を利用してアパートメント外からの全てのメソッド呼び出しをシリアル化し、スケジューラにより管理されるアパートメント内のオブジェクトに渡される。したがって、各々のアパートメント５１および５２において単一のスレッドが実行されるようになっている、すなわち、それぞれのアパートメント５１および５２がシングルスレッドアパートメント（ＳＴＡ）であれば、アパートメント５１および５２で異なるスレッドが形成され、ＯＳ１４で管理される。このため、本例のＰＯＳシステム３０は、２つのスレッドが切り替えられてアプリケーションの処理を実行するマルチスレッドになる。
【００２０】
マルチスレッドに対応したアプリケーションでは、時間のかかる処理はワーカースレッドで行うことが、ソフトウェアのパフォーマンスを向上させるうえで望ましい。たとえば、文書を作成および印刷するアプリケーションであれば、ワーカースレッドで印刷処理することにより、印刷が終了しなくてもその文書の編集を行うことが可能である。これに対し、印刷処理がＧＵＩスレッド（アプリケーションプログラムが属するメインスレッド）で行われているならば、印刷が完了するまで文書を編集することはできない。
【００２１】
また、同時に行いたい処理が複数ある場合（処理Ａと処理Ｂ）は、それぞれの処理を別のワーカースレッドで行うことができる。処理Ａはその処理を実行している間、常にＣＰＵを使用しているわけではない。たとえば、ＨＤＤにアクセスする時間などはＣＰＵを使用しない。複数の処理を異なるスレッドで実行したならば、処理ＡがＣＰＵを使用していない間に処理Ｂを実行することが可能である。したがって、同一スレッドで処理Ａと処理Ｂを連続して実行したときに比べ、異なるスレッドで実行したときの方が合計処理時間は少なくなる可能性がある。特に、ＣＰＵを継続的に使用する必要がない外部デバイスに対する入出力がある処理があるときは、それをメインスレッドと異なるワーカースレッドで行うことにより、トータルの処理時間を短縮できる。したがって、複数の周辺機器を使用する本例のＰＯＳシステム３０のようなシステムでは、マルチスレッドで実行することにより実行時間を短縮できる可能性が大きい。
【００２２】
このため、本例のオブジェクト制御システム３９においては、デバイスの種類毎のインターフェイスをアプリケーションプログラム１１に提供するコントロールオブジェクト１２ａで新しいアパートメント５２を生成するようにしている。そして、そのコントロールオブジェクト１２ａに呼び出されるサービスオブジェクト１３ａを同じアパートメント５２に生成し、コントロールオブジェクト１２ａが関わるデバイス、本例ではプリンタ２１を制御する処理を単一のアパートメント５２でシングルスレッドとして実行できるようにしている。したがって、コントロールオブジェクト１２ａに対応して生成されたアパートメント５２のスレッドがワーカースレッドとなり、アプリケーションプログラム１１が属するアパートメント５１がメインスレッドとなる。なお、本明細書においては、オブジェクトとは、クライアント側に呼び出されたサーバ内のオブジェクトを実行するためにメモリを確保してバインドされたインスタンスも含む概念として使用している。
【００２３】
たとえば、アプリケーションプログラム１１に呼び出されてコントロールオブジェクトを作成するには、コントロールオブジェクトを実行するスレッドでＣＯＭの初期化関数を呼ぶ。ＣＯＭの初期化関数を呼ぶと、そのスレッドはアパートメントの用件を満たすようになるため、新たにアパートメント５２が１つ作成され、コントロールオブジェクト１２ａはそのアパートメント５２に属することになる。一方、サービスオブジェクト１３ａにおいては、スレッディングモデルを指定しないと、アプリケーションプログラム１１が最初に作成したアパートメント５１に属してしまう。その状態であると、たとえば、コントロールオブジェクト１２ａがイベントを発生するには、サービスオブジェクト１３ａがコントロールオブジェクト１２ａのメソッドを呼ばなければならないが、これまでのようにIDispatchポインタが利用できない。すなわち、サービスオブジェクト１３ａからコントロールオブジェクト１２ａにデータを転送する場合、コントロールオブジェクト１２ａから渡されたIDispatchポインタが使用される。しかしながら、COMのインターフェイスであるIDispatchポインタは１つのアパートメント内でしか有効ではない。つまり、異なるアパートメントにあるサービスオブジェクトに他のアパートメントのコントロールオブジェクトのIDispathポインタを渡しても、サービスオブジェクトはそれを使用することができず、コントロールオブジェクト１２ａはイベントを発生することが不可能となる。
【００２４】
手動でオブジェクト間のマーシャリングを行い、アパートメント間のオブジェクトがダイレクトに通信できるようにする方法もある。しかしながら、アプリケーションプログラムにユニフォームなインターフェイスを提供することを目的としているＰＯＳシステム用のオブジェクト制御システム３９では、オブジェクトのインターフェイスを変更することは非常に困難であり、交換可能であり、また、過去のソフトウェア資産を利用できるというオブジェクト指向プログラムの利点も得られない。
【００２５】
また、メインスレッドであるＧＵＩスレッドでコントロールオブジェクトを作成し、コントロールオブジェクトのメソッドをワーカースレッドで呼び、その際にワーカースレッドでＣＯＭの初期化を行わない。さらに、ＧＵＩスレッドでＣＯＭの初期化を行わないようにするか、ワーカースレッドでのＣＯＭの初期化の後にＧＵＩスレッドでのＣＯＭの初期化を行うといった方法で新たなアパートメントが生成されないようにする方法もあり、これによってオブジェクト間の通信ができなくなることは防止できる。しかしながら、前者は、オブジェクトの呼び出しはアプリケーションのＧＵＩスレッド以外から行うことができるが、イベント処理はアプリケーションのＧＵＩスレッドで実行されるためイベント処理が長いような場合には、その間マウスやキーボード でのアプリケーションの操作が行えない。後者は、アプリケーションが使用する他のオブジェクトが属するアパートメントスレッドが変わってしまい、利用不可能になる可能性がある。また、オブジェクトのインターフェイスに影響を与えずに済むかも問題である。
【００２６】
これらの問題は、サービスオブジェクト１３が、これを呼ぶコントロールオブジェクト１２と同じアパートメントに生成されるようにすることで解決できる。そして、コントロールオブジェクト１２およびサービスオブジェクト１３が１つのアパートメントに属し、デバイスに対する入出力をシングルスレッドで実行できるシステムを構築できる。さらに、複数のアパートメントが生成されるようにすれば、従来と同様のオブジェクトプログラムによりマルチスレッドでアプリケーションプログラムを実行できるオブジェクト制御システム３９を提供できる。
【００２７】
サービスオブジェクト１３が、これを呼ぶコントロールオブジェクト１２と同じアパートメントに生成されるようにするには、マイクロソフト社のＣＯＭをサポートするＯＳ１４では、サービスオブジェクト１３ａのスレッディングモデルがＳＴＡであると宣言しなくてはならない。そのためには、レジストリに「Ａｐａｒｔｍｅｎｔ」を登録する必要がある。すなわち、サービスオブジェクトであるオートメーションサーバは、必ずユニークなＩＤを持っている。オートメーションサーバを利用する場合には、そのユニークなＩＤを用いてオブジェクトを生成し、その機能を利用する。実際には、指定されたＩＤに対するサーバの情報（ファイル名など）はレジストリに登録されていて、その情報をもとにＣＯＭがオブジェクトを生成する。したがって、レジストリにＳＴＡであることを登録しておけば、呼び出し元のアパートメントにサービスオブジェクトがロードされる。
【００２８】
レジストリへの登録は幾つかの方法があるが、本例では、オートメーションサーバの自己登録機能を用いてレジストリにサーバのＩＤを登録すると共に、ＳＴＡであることも登録するようにしている。通常は、オートメーションサーバのファイル名を指定してregsvr32.exe を実行する。すると、そのファイルの外部関数STDAPI DllRegisterServer(void)が呼ばれる。DllRegisterServer内で、COleObjectFactory::UpdateRegistryAll()が呼ばれ、必要な情報がレジストリに登録される。実際には、UpdateRegistryAllはBOOL COleObjectFactory::UpdateRegistry(BOOL bRegister)を呼び出し、その中で情報が書き込まれる。マイクロソフト社が提供するＭＦＣ（Microsoft Foundation Class Library）では、オブジェクトを登録するときの複雑さ緩和するためにCOleObjectFactoryというベースクラスをサポートしており、そのクラスから派生したCOleObjectFactoryApart を作成し、UpdateRegistry(BOOL bRegister)をオーバーライドすることにより、自己登録時にＳＴＡであることも含めてレジストリに登録することができる。オーバーライドした内容は以下の通りである。
0004635341.tif 000002
0004635341.tif 000003
0004635341.tif 000004
さらに、ＩＭＰＬＥＭＥＮＴ ＯＬＥＣＲＥＡＴＥ ＡＰＡＲＴ、ＤＥＣＬＡＲＥ ＯＬＥＣＲＥＡＴＥ ＡＰＡＲＴマクロを定義し、既存のコードのＩＭＰＬＥＭＥＮＴ ＯＬＥＣＲＥＡＴＥ、ＤＥＣＬＡＲＥ ＯＬＥＣＲＥＡＴＥを置き換える。すなわち、それぞれのマクロは以下のように定義する。
0004635341.tif 000005
以上のようにオーバーライドすることにより、標準のレジストリに登録する処理に加え、レジストリキーを取得し、そのキーをオープンし、さらに、アパートメント（ＳＴＡ）である情報を書き込み、キーをクローズするという手順でレジストリにサービスオブジェクト（ＳＯ）がＳＴＡであることを登録することができる。そして、サービスオブジェクトのプログラム中で、このCOleObjectFactoryから派生したCOleObjectFactoryApartをCOleObjectFactoryの代わりに利用することにより、図３に示すように、最初にサービスオブジェクトがステップ６１でインスールされ、ステップ６２でレジストリに登録されるときに同時にサービスオブジェクトがアパートメントであることが登録される。したがって、本例のようにＳＴＡであることを自己登録する機能を備えたサービスオブジェクトのプログラムをＣＤ−ＲＯＭなどの、コンピュータに読み取り可能な適当な記録媒体に記録して提供することにより、それを用いてユーザがインストールすると自動的にサービスオブジェクトはレジストリにＳＴＡとして登録される。
【００２９】
このようにサービスオブジェクト１３がレジストリに登録されていると、図４に示すように、コントロールオブジェクト１２に呼ばれたときに、ステップ６５において、そのコントロールオブジェクト１２が属するアパートメントにサービスオブジェクト１３が生成される。したがって、コントロールオブジェクト１２がアパートメント５２に生成されているときは、サービスオブジェクト１３はアパートメント５２に生成され、コントロールオブジェクト１２がアパートメント５１に生成されているときは、サービスオブジェクト１３はアパートメント５１に生成される。そして、ステップ６６において同じアパートメントにおいてコントロールオブジェクト１２のインターフェイスポインタをサービスオブジェクト１３に渡し、ステップ６７で通信を最も高速に行える状態で実行する。
【００３０】
さらに、ＰＯＳシステム用のオブジェクト制御システム３９においては、コントロールオブジェクト１２はデバイスの種類毎に用意されており、サービスオブジェクト１３はデバイス毎に用意される。このため、これらのオブジェクト１２および１３の組み合わせを１つのアパートメント５２に属させることにより、デバイス単位の処理をマルチスレッドで実行するのに適したワーカースレッドを形成することができる。
【００３１】
上記において、コントロールオブジェクト１２の属するアパートメントとしてマルチスレッドアパートメント（ＭＴＡ）を生成することも可能であり、コントロールオブジェクト、サービスオブジェクトをＭＴＡに属するように登録することも可能である。しかしながら、コントロールオブジェクト、サービスオブジェクトをマルチスレッド対応に開発し直す必要があり、経済的ではなく、また、信頼性を高めることも容易ではない。
【００３２】
ＣＯＭの呼び出しでは、異なるアパートメント間の通信、異なる種類のアパートメント間の通信、異なるプロセス間の通信にはマーシャリング処理が必要であり時間がかかる。コントロールオブジェクトを使用する場合に多く利用されるマイクロソフト社のVisual BasicはＳＴＡのみをサポートしているためコントロールオブジェクトはＳＴＡであることが最も実行速度を高くする方法であるため、コントロールオブジェクトはＳＴＡであることが望ましい。同様にして、コントロールオブジェクトとサービスオブジェクト間の通信を最も高速に行うには、サービスオブジェクトはコントロールオブジェクトと同じ種類の同じアパートメントに属するようにする。つまり、サービスオブジェクトもコントロールオブジェクトと同様にＳＴＡとしてレジストリに登録しておくことが望ましい。
【００３３】
また、１つのアパートメントに、複数のコントロールオブジェクト１２と、それらに呼び出されるサービスオブジェクト１３が属するようにオブジェクト制御システム３９を構築することも可能である。この場合でも、アプリケーションプログラム11が最初に作成したアパートメントと異なるアパートメントを用意でき、アプリケーションプログラム１１が最初に作成したアパートメントのスレッドと異なるスレッドでデバイスを制御できる。しかしながら、アパートメントがＳＴＡであるとすると、アパートメント内はシングルスレッドになるので、複数のデバイスの制御が連続して行われ効率を上げることが難しい。これに対し、１つのアパートメントに１つのコントロールオブジェクト１２が属するようにオブジェクト制御システム３９を構築すると、アパートメントを利用して１つのデバイス毎にワーカースレッドを用意することが可能となり、マルチスレッドで処理を実行したときにトータルの処理時間を短縮し、実質的な処理速度を向上できる可能性が高くなる。
【００３４】
なお、以上では、多種多様な周辺機器を取り扱う可能性の高いＰＯＳシステムを例に本発明を説明しているが、他のシステムに対しても本発明を適用できることはもちろんである。
【００３５】
【発明の効果】
以上に説明したように、本発明においては、アプリケーションがコントロールオブジェクトをどのように作成するかに関わらず、デバイス毎のインターフェイスを提供するサービスオブジェクトをコントロールオブジェクトと同じアパートメントに作成できるので、これらのオブジェクトの仕様を変えずに、ＰＯＳアプリケーションプログラムをデバイス単位でマルチスレッド化して実行することが可能となる。したがって、ＰＯＳアプリケーションプログラムの処理時間を短縮することができる制御システムを低コストで提供することができる。
【図面の簡単な説明】
【図１】オブジェクトサービスによりＰＯＳシステムの概要を示す図である。
【図２】本発明のオブジェクト制御システムの概要を示すブロック図である。
【図３】本発明のサービスオブジェクトを登録するステップを示す図である。
【図４】本発明のサービスオブジェクトが生成されるステップを示す図である。
【符号の説明】
１０    ＰＯＳシステム
１１    アプリケーションプログラム
１２    コントロールオブジェクト
１３    サービスオブジェクト
１９、３９    ＰＯＳコントロールシステム（オブジェクトサービス）
５１、５２    アパートメント
【図１】
0004635341.tif 000006
【図２】
0004635341.tif 000007
【図３】
0004635341.tif 000008
【図４】
0004635341.tif 000009