JP3915876B2 - 文字列データの処理方法および処理装置 - Google Patents
文字列データの処理方法および処理装置 Download PDFInfo
- Publication number
- JP3915876B2 JP3915876B2 JP2000403300A JP2000403300A JP3915876B2 JP 3915876 B2 JP3915876 B2 JP 3915876B2 JP 2000403300 A JP2000403300 A JP 2000403300A JP 2000403300 A JP2000403300 A JP 2000403300A JP 3915876 B2 JP3915876 B2 JP 3915876B2
- Authority
- JP
- Japan
- Prior art keywords
- character string
- string data
- data
- application program
- character
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/08—Payment architectures
- G06Q20/20—Point-of-sale [POS] network systems
Description
【発明の属する技術分野】
本発明は、コンポーネント化されたオブジェクトソフトウェアを用いた処理方法およびシステムに関するものである。
【0002】
【従来の技術】
オブジェクト指向プログラミングによるコンポーネントベースのプログラムあるいはソフトウェア(オブジェクト)は、オペレーティングシステム上で稼動する再利用可能なソフトウェアであり、オブジェクトを用いて多種多様なシステムが開発されている。たとえば、マイクロソフト社が提供するオペレーティングシステム(OS)であるウィンドウズ(登録商標)でサポートするCOM(コンポーネントオブジェクトモデル:Component Object Model)は、クライアントであるアプリケーションプログラム(コンテナアプリケーション)がオブジェクトを使用可能とする環境を提供する広範囲な機能を有するシステムである。
【0003】
したがって、COMで利用可能なオブジェクトによりシステム開発を行うと、ソフトウェアの部品化と再利用が容易になり、ユーザーがシステムを構築し、メンテナンスしていく費用を低減できる。また、既存のソフトウェア資産を継続あるいは承継できるので、システム開発も容易となり、それに伴う費用も削減できる。さらに、コンポーネントベースでオブジェクトが開発できるので、多種多様なサブシステムあるいは周辺装置により構成される複雑な構成のシステムの開発も容易になり、ネットワーク環境下で稼動するシステムの開発には欠かせないものとなっている。
【0004】
POSシステムは多種多様な周辺装置により組み立てられるシステムの1つであり、パーソナルコンピュータなどの中心となるホストコンピュータにディスプレイ、プリンタ、スキャナ、ドロワ、カードリーダなど様々な入出力装置が接続されることによりシステムが構築される。本願出願人は、特開平9−106355号などにより、オブジェクトを用い構築されたPOSシステムであってパーソナルコンピュータベースのフレキシブルな構成のPOSシステムについて開示している。
【0005】
図1に、オブジェクト分散型のPOSシステム10の概要を示してある。このPOSシステム10は、各メーカが提供するPOSアプリケーションプログラム11と、プリンタ21、スキャナ22あるいはドロワ23などの周辺装置(デバイス)の種類単位(デバイスクラス単位)に供給されるコントロールオブジェクト12と、周辺装置毎、すなわち、デバイス毎に供給されるサービスオブジェクト13とを備えている。したがって、POSアプリケーションプログラム11がプリンタ21から出力するときは、データがプリンタのコントロールオブジェクト(CO)12に渡され、さらに、出力するプリンタのメーカおよび機種に対応したサービスオブジェクト(SO)13に渡され、OS14を介してプリンタ21に供給される。また、POSアプリケーションプログラム11は、OS14を介してパーソナルコンピュータのハードウェア資源であるディスプレイ15やキーボード16も周辺装置として使用できるようになっている。
【0006】
図1に示したPOSシステム10では、コントロールオブジェクト12およびサービスオブジェクト13を備えたオブジェクト制御システム19がPOSアプリケーションプログラム11に対してプリンタ21などの周辺機器に対して機種依存性のないインターフェイスを提供する。また、コントロールオブジェクト12は周辺機器のデバイスクラス毎に開発されているので、その範囲でプログラム11を実行するときにOS14にサポートされているCOMによりインスタンスが形成され、プログラム11にバインドされる。さらに、サービスオブジェクト13はデバイス毎にコントロールオブジェクト12に対してデバイスに依存しないユニホームなインターフェイスを提供しており、対応するデバイスがコントロールオブジェクト12を介して呼ばれるとインスタンスが形成されてバインドされる。たとえば、マイクロソフト社のCOMを基盤とするシステムであれば、コントロールオブジェクト12としてはプログラム11にイベントを返すことが可能なActiveXコントロール(OLEコントロール)を採用でき、サービスオブジェクト13としてはActiveXコントロールに対してサーバとなるActiveXサーバ(OLEオートメーションサーバ)を採用できる。そして、オートメーションによりバインディングされたこれらのオブジェクト間、すなわちアプリケーションを実行するためにバインドされたオブジェクトのインスタンス間のデータ通信をCOMがサポートしている。
【0007】
オートメーションはCOMのIDisptchインターフェイスに依存しており、オブジェクト間の通信はInvokeというメソッドを実行することにより行われる。このため、オブジェクト指向のプログラミング言語であるマイクロソフト社が提供するVisual C++(以下VC++)(登録商標)によるOLEオートメーション機能を用いたシステムの開発環境を提供するMFC(Microsoft Foundation Class Library)では、アプリケーションあるいはクライアント側のオブジェクトからInvoke関数をコールする複雑さをカバーするためにCOleDispatchDriverと言うベースクラス(オブジェクト)が用意されている。したがって、クライアント側のオブジェクトは、このクラスから派生させたインターフェイスオブジェクトのメンバー関数であるInvokeHelperをコールすることにより、サーバ側のオブジェクトに対しデータを転送することができる。
【0008】
図2に、本例のPOSシステム10において、データが転送される様子を模式的に示してある。まず、アプリケーション11はプリンタ21で文字データを印刷するために、プリンタのコントロールオブジェクト12の印刷を行うためのメソッドを呼んで文字データを渡す。コントロールオブジェクト12は、プリンタ21に対応したサービスオブジェクト13のメソッドを呼ぶために、インターフェイスオブジェクト18であるCOleDispatchDriverクラスのメンバー関数InvokeHelperを呼ぶ。そして、このインターフェイスオブジェクト18を介してデータがサービスオブジェクト13に転送され、OS14を介してプリンタ21により出力される。
【0009】
【発明が解決しようとする課題】
しかしながら、このPOSシステム10において、バーコードデータのようにnullデータ(16進「00」、以降においては文字列データは全て16進で示す)が文字列データの途中に含まれる可能性があると、その文字列がプリンタ21に再現されないという問題がある。たとえば、プリンタのコントロールオブジェクト12はPrintBarCodeというメソッドを備えているが、そのDataパラメータに以下のデータ(16進表記)を指定した場合に次のようなプロセスでデータが受け渡しされてしまう。
【0010】
アプリケーション11で次の文字列データA0がコントロールオブジェクト12に渡される。
A0: 7B 41 00 30 31 32 33 34 35 36 37 38 39・・・(1)
コントロールオブジェクト12では、文字列データA0を受け取るが、受け取る文字列データの形式は、LPCTSTR型で宣言されている。LPCTSTR型は、文字列の終端が「00」で定義された8ビットのANSI規格によるコードであり、さらにシフトJISで文字が定義される文字列データである。したがって、文字列中に「00」があることは許容されていない。バーコードのようにキャラクタではなくバイトデータを画像データとして印刷しようとしない場合は、印刷可能なキャラクタに「00」は含まれておらず、プリンタ用のオブジェクトにおいては文字列データの定義としてLPCTSTR型は一般的なものである。
【0011】
一方、COMの環境では、COMがプログラム−オブジェクト間およびオブジェクト−オブジェクト間のデータ転送をサポートしており、COMを介して文字列データを受け取るときは文字数データ付きの基本文字列データであるBSTR型で渡されるので、以下のようなデータとなる。
A1: 0D 00 00 00 7B 41 00 30 31 32 33 34 35 36 37 38 39 00
・・・(2)
BSTR型の文字列データは、先頭の4バイトにはデータの長さの情報が格納され、文字列データの最後(文字数には含まれない)が「00」で終了するデータである。そして、ポインタからの文字数によりデータ領域が管理されるので、文字列データ中に「00」があっても文字列データとして取り扱われる。
【0012】
ここで、コントロールオブジェクト12がサービスオブジェクト13のプリント出力用のメソッドを呼ぶために、MFCのライブラリとして用意されているインターフェイスオブジェクト18であるCOleDispatchDriverクラスのメンバ関数InvokeHelperを呼び、InvokeHelperはさらに、InvokeHelperVを以下のように呼ぶ。
void COleDispatchDriver::InvokeHleperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet, Void* pvRet, const BYTE*, pbParamInfo, va_list argList)
・・・(3)
引数は、それぞれ、dwDispIDが呼び出されるメソッドまたはプロパティを識別し、wFlagsがIDispatch::Invokeの呼び出しコンテキストを示すフラグであり、vtRetが戻り値の型を指定し、pvRetが戻り値またはプロパティ値を受け取る変数のアドレスを指定し、pbParamInfoがこれに続く引数の型を指定するバイト列のNULLで終わる文字列へのポインタを指定し、argListが引数のリストを指定する。
【0013】
これにより、COleDispatchDriver::InvokeHelperVは、文字列データを以下のように変換する。
【0014】
LPCSTR lpsz = va_arg(argList, LPSTR);
pArg->bstrVal = ::SysAllocString(T2COLE(lpsz));
if (lpsz != NULL && pArg->bstrVal == NULL)
AfxThrowMemoryException();
pArg->vt = VT_BSTR; ・・・(4)
ここでは、コントロールオブジェクト12から渡された文字列データlpszが8ビット(マルチバイト)のシフトJIS(以降ではTキャラクタ)であるLPCTSTR型で宣言されているので、文字変換マクロT2COLEが自動的に選択され、COMを介してデータ転送する基本的な文字列(転送文字列)である16ビット(ワイドキャラクタ)のUNICODEに変換する。まず、最初の行では、引数のリストからDataパラメータを取り出し、次の行で実際にデータの変換が行われる。文字変換マクロT2COLEでは、AfxA2Whelperが呼ばれ、その関数内のMultiByteToWideCharにより、データは以下の16ビット単位のワイドキャラクタのデータに変換される。
A2: 7B 00 41 00 00 00 ・・・(5)
すなわち、コントロールオブジェクトで文字列データがnullデータを終端とするLPCTSTR型で宣言されているので、文字列データ中に含まれている「00」を文字列データの終端として変換される。このため、「00」以降のデータを含まない、「00」以降が削除された、終端が「00」のワイドキャラクタ(LPCOLESTR型)の文字列データとなる。そして、SysAllocStringにより、文字数(実際にはバイト数)データを備えたBSTR型に変換されCOMを介してサービスオブジェクト13に転送される。
【0015】
すなわち、サービスオブジェクト13に転送されるデータは4バイトの文字数データが加わり以下のようになる。
A3: 04 00 00 00 7B 00 41 00 ・・・(6)
サービスオブジェクト13では、コントロールオブジェクト12と同様に文字列データがLPCTSTR型で宣言されており、COMにより、宣言された型の文字列データに合わせた8ビットのデータを受け取る。すなわち、サービスオブジェクトにおいては以下のような文字列データを受け取る。
A4: 7B 41 00 ・・・(7)
サービスオブジェクト13により制御されるプリンタ21では、アプリケーションが指定したデータを印字することができない。COMにより送られる文字列データはBSTR型であり、上記の文字列データA4をBSTR型でキャストして処理することも可能であるが、メモリを見るとデータは以下のようになっており、BSTR型としての文字列の長さの情報を持っているが、コントロールオブジェクトから転送されるときに切り捨てられたデータは残されていない。
A5: 02 00 00 00 7B 41 00 ・・・(8)
このように、コントロールオブジェクト12においてLPCTSTR型で宣言した文字列データでアプリケーションプログラム11から「00」を含むデータを受信すると、それをサービスオブジェクト13に転送してプリンタ21で出力することができない。一方、コントロールオブジェクトやサービスオブジェクトにおいて文字列データの宣言された型を変更することは、オブジェクト間、あるいはアプリケーションとオブジェクト間で交換されるパラメータの仕様の統一を図り、ユニホームなインターフェイスをアプリケーションプログラムに提供するオブジェクト指向のPOSシステムでは採用することができない。また、ユーザがすでに導入しているソフトウェア資産を保護するという点でも好ましくない。
【0016】
また、バイナリコンバージョンを利用して「00」を強制的に他の値に変換してから転送し、次のオブジェクト内で元に戻すという方法がないわけではない。しかしながら、処理が複雑になることはもちろんであるが、オブジェクト内で、他のオブジェクトの変換処理とマッチした処理を行う必要があり、転送元のオブジェクトの仕様に依存することになる。したがって、ソフトウェアの部品化と再利用の可能性を高めるというオブジェクト指向プログラムとは相反する。さらに、バイナリコンバージョンされたデータを処理できないオブジェクトであれば、異なった文字列を出力する可能性がある。
【0017】
このように「00」を含む文字列データの処理は難しい問題を含んでいるが、バーコードを含め、多種多様なデータが取り扱えるPOSシステムを構築するためには「00」を含む文字列データがサービスオブジェクトに正確に転送され、プリンタなどのデバイスで出力できるようにすることが必要である。
【0018】
そこで、本発明においては、コントロールオブジェクトあるいはサービスオブジェクトの文字列データの型の宣言を変更したり、複雑な処理を行わないで、「00」すなわちnullデータを含む文字列データであっても、正確にオブジェクト間で転送することができる文字列データの処理方法、処理システムおよびそれに用いられるオブジェクトプログラムを提供することを目的としている。
【0019】
【課題を解決するための手段】
このため、本発明においては、アプリケーションプログラムを実行する際に、クライアント側となる第1のオブジェクト、たとえば上記のコントロールオブジェクトからサーバ側となる第2のオブジェクト、たとえば上記のサービスオブジェクトに対し、COMなどのコンピュータのオペレーティングシステム上で稼動するインターフェイスオブジェクトを介して第1の文字列データを転送する際に、インターフェイスオブジェクトにおいて、第1のオブジェクトの第1の文字列データの宣言された型に関わらず第1の文字列データを、文字列データ中に含まれるnullデータも含めて文字数をカウントできる基本文字列データとして第1の文字列データの実効文字数を求め、オペレーティングシステムが転送可能な転送文字列データに第1の文字列データを実効文字数だけ変換する工程と、第2のオブジェクトにおいて、第1の文字列データの宣言された型に関わらず、第1の文字列データを基本文字列データとして処理を実行する工程とを有する文字列データの処理方法により処理するようにしている。
【0020】
したがって、本発明の、アプリケーションプログラムを実行する際に、クライアント側となる第1のオブジェクトと、この第1のオブジェクトに対しサーバ側となる第2のオブジェクトと、第1のオブジェクトから第2のオブジェクトにオペレーティングシステムを介して第1の文字列データを転送可能なインターフェイスオブジェクトとを有する文字列データ処理システムにおいては、インターフェイスオブジェクトは、第1のオブジェクトの第1の文字列データの宣言された型に関わらず第1の文字列データを、文字列データ中に含まれるnullデータも含めて文字数をカウントできる基本文字列データとして第1の文字列データの実効文字数を求め、オペレーティングシステムが転送可能な転送文字列データに第1の文字列データを前記実効文字数だけ変換する手段を備えている。さらに、第2のオブジェクトは、第1の文字列データの宣言された型に関わらず、第1の文字列データを基本文字列データとして処理を実行する手段を備えている。
【0021】
オブジェクトで宣言されている型に関わらず、文字列データを、その文字列データ中に含まれるnullデータも含めて文字数をカウントできる基本文字列データとして処理することにより、転送しようとする第1の文字列データ中に含まれるnullデータも含めて実効文字数を求めることができる。そして、オペレーティングシステムが転送可能な転送文字列データに第1の文字列データを実効文字数だけ変換することにより、文字列データがどのような型で宣言されていても、文字列データの途中に含まれる「00」のnullデータを文字列データの終端とせず、nullデータも含めて正確に転送文字列データとすることができる。このため、標準化された転送文字列データでしかオブジェクト間のデータ転送をサポートできないようなCOMなどのアーキテクチャあるいはその一貫として動作するシステム上であっても、nullデータを含めて正確に文字列データを転送できる。
【0022】
基本文字列データは、文字数データ付きの文字列データ、たとえばCOMでサポートされているBSTR型の文字列データを利用できる。また、オブジェクト間のみならず、アプリケーションプログラムとオブジェクト間におけるデータ転送であっても同様の問題が発生する可能性がある。したがって、第1のオブジェクトは、アプリケーションまたは文字列データを処理可能な周辺装置の種類単位のコントロールオブジェクトであり、第2のオブジェクトは、制御オブジェクトまたは周辺装置毎のサービスオブジェクトである。また、本発明はアプリケーションプログラムに対しても、アプリケーションプログラムを第1のオブジェクトとすれば適用することが可能である。したがって、第1のまた、本明細書において、オブジェクトとはアプリケーションを実行する際にCOMのバインディングメカニズムによりバインディングされるオブジェクトのインスタンスも含まれており、特に記載していないかぎり、オブジェクトとインスタンスを区別していない。
【0023】
このように、本発明の文字列データの処理方法および処理システムによれば、オブジェクトにおける文字列データの宣言された型が文字列データ中にnullデータが含まれないことを前提としたものであっても、その文字列データ中にnullデータが含まれた文字列データをオブジェクタ間で正確に転送できる。したがって、従来からのオブジェクトの文字列データの宣言された型を変更しないで、バーコードデータなどのnullデータが含まれる可能性がある文字列データを処理することができる。このため、本発明により、バーコードデータなどを含めた多種多様なデータ形式を正確にハンドリングすることができるオブジェクトベースのPOSシステムを提供することができる。
【0024】
また、本発明の文字列データの処理方法の各行程をコンピュータに実行させるためのプログラムをコンピュータ読み取り可能な磁気ディスクなどの適当な記録媒体に記録して提供することもできる。
【0025】
【0026】
【0027】
【発明の実施の形態】
以下では、上記にて図1および図2に基づき説明した分散型オブジェクトで構築されるPOSシステム10に基づき本発明についてさらに説明する。まず、本発明をPOSシステム10に適用するために、MFCのCOleDispatchDriverクラスからCCoOleDispatchDriverクラスのインターフェイスオブジェクトを派生し、そのデータ変換部分を以下のようにオーバーライドする。
LPCSTR lpsz = va_arg(argList, LPSTR);long lLen = ::SysStringByteLen((BSTR)lpsz);long lDestLen = lLen + 1;
LPWSTR pWideChar = (LPWSTR)CoTaskMemAlloc(lDestLen * 2 * sizeof(WCHAR));long lTrueLen;
if(lLen)[
lTrueLen = MultiByteToWideChar(CP_ACP, 0, lpsz, lLen, pWideChar, lLen);]
else[
lTrueLen = MultiByteToWideChar(CP_ACP, 0, lpsz, 0, pWideChar, lDestLen);]
pArg->bstrVal = ::SysAllocStringLen(pWideChar, lTrueLen);CoTaskMemFree((void*)pWideChar);
if (lpsz != NULL && pArg->bstrVal == NULL) AfxThrowMemoryException();
pArg->vt = VT_BSTR;
・・・(9)
上記のデータ変換の処理では、まず、1行目でパラメータリストargListの中から文字列パラメータを取り出し、LPCSTR型としている文字列データlpszにセットする。以下、各行毎に順番に、文字列データlpszをBSTR型にキャストし、文字列データの途中にnullデータがある場合も、それを含めた文字列データの長さ(文字数データ)を求める。さらに、文字数データlLenが0にならないように1を足し、さらに、COMで転送される標準の文字コードである16ビットのUNICODEに対応してワイドキャラクタに変換するためのメモリを確保する。そして、文字列データlpszを文字数データlLenで長さを指定してワイドキャラクタに変換しLPWSTR型の文字列データpWideCharに格納する。
【0028】
その後、サービスオブジェクトにCOMを介してデータを渡すために、BSTR型の引数pArgに文字数データlLenで長さを指定して変換する。このようにして変換が終了すると、確保したワイドキャラクタ用のメモリを開放する。また、その下でパラメータが不正な場合は例外を発生させる。そして、サービスオブジェクトに渡す文字列データpArgがBSTR型であることを設定する。
【0029】
したがって、本例のPOSシステム30は、システム全体の構成は図1と同様であるが、コントロールオブジェクト31、インターフェイスオブジェクト38およびサービスオブジェクト33においては、図3に示すようにデータが転送される。まず、アプリケーションプログラム11が、ステップ51においてバーコードを印刷するためのメソッドであるPrintBarCodeメソッドを呼んで、上記と同様に以下のnullデータ(16進「00」)を含む文字列データA0を渡すと、コントロールオブジェクト32が以下のBSTR型の文字列データA1を受け取る。
A0: 7B 41 00 30 31 32 33 34 35 36 37 38 39・・・(1)
A1: 0D 00 00 00 7B 41 00 30 31 32 33 34 35 36 37 38 39 00
・・・(2)
そして、本例のコントロールオブジェクト32は、ステップ52において、サービスオブジェクトにバーコードの文字列データを転送するために、COleDispatchDriverの代わりに、上記のように変換機能をオーバ−ライドしたインターフェイスオブジェクト38であるCCoOleDispatchDriverクラスのInvokeHeplerVを呼ぶ。
void CCoOleDispatchDriver::InvokeHleperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet, Void* pvRet, const BYTE*, pbParamInfo, va_list argList)
・・・(3)´
本例のインターフェイスオブジェクト38においては、上述したように、ステップ53で、コントロールオブジェクト32から渡された文字列データlpszがLPCTSTR型で宣言されているが、BSTR型にキャストし、文字長さ(文字数)のデータを求める。そして、ステップ54でCOMを介して転送するために求められた文字数分を欠けることなくワイドキャラクタに変換し、さらに、ステップ55でワイドキャラクタのBSTR型の文字列データでサービスオブジェクトに転送する変数pArgにセットする。したがって、本例のインターフェイスオブジェクト38では以下のように文字列データが変換される。まず、ステップ54においては、文字列データの長さを指定して文字列変換関数MultiByteToWideCharによりワイドキャラクタに変換することにより文字列データA1は次の文字列データA2´に変換される。
A2´: 7B 00 41 00 00 00 30 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00 38 00 39 00 ・・・(5)
上記の文字列データA2に対し、本例では、文字列データの長さを指定しているため、文字列データに含まれるnullデータ(16進「00」)以降のデータもワイドキャラクタに変換される。
【0030】
さらに、このデータが、ステップ55において、文字変換マクロSysAllocStringLenによりCOMを介してデータを転送する文字列データのUNICODE(16ビット)のBSTR型の文字列データA3´に変換される。
A3´: 1A 00 00 00 7B 00 41 00 00 00 30 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00 38 00 39 00 ・・・(6)´
したがって、サービスオブジェクトには、nullデータを含め、アプリケーションプログラム11から供給された全ての文字列データが渡される。
【0031】
一方、サービスオブジェクト33においては、文字列データを受け取る引数pDataがnullデータを終端データとするNull−TerminalのLPCTSTR型で宣言されるので、以下の文字列データA4を受け取る。
A4: 7B 41 00 ・・・(7)
したがって、このままLPCTSTR型として文字列データを扱うと、やはりnullデータ以降のデータを処理することができない。しかしながら、上述したようにCOMを介して文字列データが転送される場合は、メモリ上はBSTR型で転送先のオブジェクトに送られる。したがって、サービスオブジェクトにおいては、その関数のプロトタイプでその引数の型がLPCTSTRと宣言されているだけで、実際のデータはBSTR型である。したがって、このデータの前後のメモリを見ると次のようになっている。
A5: 0D 00 00 00 7B 41 00 30 31 32 33 34 35 36 37 38 39 00
・・・(8)´
したがって、本例のサービスオブジェクト33においては、以下のように、ステップ56において、LPCTSTR型で宣言されている引数pDataをBSTR型であるとして処理する。
lDataLen = SysStringByteLen((BSTR)pData);CString strBinaryData (pData, lDataLen);
・・・(10)
すなわち、上記の処理では、LPCTSTR型で宣言されている引数pDataをBSTR型にキャストして文字数(文字列長さ)を求め、MFCのCStringクラスの変数strBinaryDataにpDataをその文字数(文字列長さ)IDataLenだけセットしてプリンタから印刷できるようにしている。したがって、アプリケーションプログラム11から供給されたnullコードあるいはデータである16進「00」を含む文字列がサービスオブジェクト33からnullデータおよびそれ以降のデータが削除されることなくプリンタに伝達され、出力される。
【0032】
このように、本例のコントロールオブジェクト32からサービスオブジェクト38にCOMを介してデータを転送するインターフェイスオブジェクト38はMFCのベースクラスから派生させたものであるが、null−terminateの文字列データLPCTSTR型であっても、その文字列データを文字長さあるいは文字数のデータを含んだ「00」を取り扱えるBSTR型のデータにキャストして本来の有効な文字数(実効文字数)を求め、その文字数に相当するデータを文字列データLPCTSTR型に関わらず、ワイドキャラクタに変換してCOMで転送可能なUNICODEの文字列データにしている。したがって、従来のMFCクラスから派生したインターフェイスオブジェクトでは、PLCTSTR型などのnull−terminateの文字列データとして宣言されている場合は、nullデータ以降がCOMを介してオブジェクト間を転送されるときに削除されてしまうのに対し、nullデータを含む文字列データであっても正確にオブジェクト間で渡すことができる。アプリケーションプログラムを作成する際に、プログラマが独自にマーシャリングを行う代わりにMFCクラスから派生したインターフィエスオブジェクトを使用する場合も同様であり、本発明に係るインターフェイスオブジェクトを利用することによりアプリケーションプログラムからコントロールオブジェクトに対してもnullデータおよびそれ以降のデータが落ちるのを防止できる。
【0033】
また、上記のコントロールオブジェクトおよびサービスオブジェクトにおいては、文字列データは元来のLPCTSTR型で宣言されていても、nullデータに関わる問題を防止できるので、アプリケーションプログラム11に対しユニホームなAPIを提供する分散型オブジェクトによるPOSコントロールシステムの仕様を変更する必要はない。したがって、アプリケーションプログラム11を提供する側、また、それを使用するユーザは、過去のソフトウェア資産を無駄にすることなく本発明によりnullデータも正確に取り扱うことができるPOSコントロールシステム39を利用することができる。
【0034】
さらに、従来のnull−terminateの文字列データをそのままnull−terminateとして変換してしまうインターフェイスオブジェクトで「00」を含んだ文字列データを強引に取り扱おうとすると、バイナリコンバージョンを利用して「00」を強制的に他の値に変換してからオブジェクト間を転送し、オブジェクト内で元に戻すという方法がないわけではない。しかしながら、処理が複雑になることはもちろんであるが、オブジェクト内で、他のオブジェクトの変換処理とマッチした処理を行う必要があり、転送元のオブジェクトの仕様に依存することになる。したがって、ソフトウェアの部品化と再利用の可能性を高めるというオブジェクト指向プログラムとは相反するものとなるので採用しがたい。さらに、バイナリコンバージョンされたデータを処理できないオブジェクトであれば、異なった文字列を出力する可能性がある。これに対し、上記に説明した本発明の方法であれば、nullデータおよびそれ以降のデータをそのままの状態で次のオブジェクトに転送できるので、それを受け取ったオブジェクトはnull−terminateの文字列データとして処理しても良く、あるいは上記のようにBSTR型にキャストして「00」を含めて処理しても良い。このため、従来のオブジェクトに影響を及ぼすこともなく、nullデータを取り扱うことができるコントロールシステムを構築できる。
【0035】
本例のPOSコントロールシステム39を構築するコントロールオブジェクト32、サービスオブジェクト33およびインターフェイスオブジェクト38は、図3に示した各ステップの処理を実行可能な命令を有するプログラムとしてCD−ROMあるいはその他のコンピュータに読み取り可能な記録媒体に記録して提供することができる。そして、コンピュータ内のOS14により管理されるメモリ領域にインストールすることにより、各々のオブジェクトのメソッドあるいはプロパティなどが呼び出されると、各々のオブジェクトのインスタンスが生成され、バインドされてアプリケーションプログラムの所望の処理が実行される。
【0036】
なお、以上では、バーコードなどの多種多様なデータを取り扱う可能性があるためにnullデータを実際に処理する可能性が高いPOSシステムを例に本発明を説明しているが、文字列データを取り扱う他のシステムにおいても本発明を同様に適用できる。
【0037】
【発明の効果】
以上に説明したように、本発明においてはバイナリコンバージョンを利用して文字列データを特殊な形式に変換することなくnullデータ(16進「00」)を途中に含む文字列データであっても正確にオブジェクト間を転送できる。したがって、バーコードデータなどのnullデータを含む可能性のある文字列データを処理可能な方法および装置をオブジェクサービスによって提供することが可能となり、POSシステムなどの多種多様なデータを取り扱う可能性のあるシステムを容易に構築できるソフトウェア開発手段を提供できる。
【図面の簡単な説明】
【図1】 オブジェクトサービスによりPOSシステムの概要を示す図である。
【図2】 アプリケーションプログラムおよびオブジェクト間を文字列データが転送する様子を示す図である。
【図3】 本発明のコントロールオブジェクト、インターフェイスオブジェクトおよびサービスオブジェクトの処理の概要を示す図である。
【符号の説明】
10 POSシステム
11 アプリケーションプログラム
12、32 コントロールオブジェクト
13、33 サービスオブジェクト
18、38 インターフェイスオブジェクト
19、39 POSコントロールシステム(オブジェクトサービス)
Claims (11)
- アプリケーションプログラムを実行する際に、クライアント側となる第1のオブジェクトからサーバ側となる第2のオブジェクトに対し、コンピュータのオペレーティングシステム上で稼動するインターフェイスオブジェクトを介して第1の文字列データを転送する際に、
前記インターフェイスオブジェクトにおいて、前記第1のオブジェクトの前記第1の文字列データの宣言された型に関わらず前記第1の文字列データを、当該文字列データ中に含まれるnullデータも含めて文字数をカウントできる基本文字列データとして前記第1の文字列データの実効文字数を求め、前記オペレーティングシステムが転送可能な転送文字列データに前記第1の文字列データを前記実効文字数だけ変換する工程と、
前記第2のオブジェクトにおいて、前記第1の文字列データの宣言された型に関わらず、前記第1の文字列データを前記基本文字列データとして処理を実行する工程とを有することを特徴とする文字列データの処理方法。 - 請求項1において、前記基本文字列データは、文字数データ付きの文字列データであることを特徴とする文字列データの処理方法。
- 請求項1において、前記アプリケーションプログラムは、nullデータを含む文字列データを処理可能であり、前記第1のオブジェクトは、前記アプリケーションプログラムまたは文字列データを処理可能な周辺装置の種類単位のコントロールオブジェクトであり、前記第2のオブジェクトは、前記コントロールオブジェクトまたは前記周辺装置毎のサービスオブジェクトであることを特徴とする文字列データの処理方法。
- 請求項3において、前記文字列データはバーコードデータであることを特徴とする文字列データの処理方法。
- 請求項3において、前記アプリケーションプログラムはPOSアプリケーションプログラムであることを特徴とする文字列データの処理方法。
- 請求項1乃至5項のいずれかに記載の文字列データの処理方法の各工程をコンピュータに実行させるためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
- アプリケーションプログラムを実行する際に、クライアント側となる第1のオブジェクトと、この第1のオブジェクトに対しサーバ側となる第2のオブジェクトと、前記第1のオブジェクトから前記第2のオブジェクトにオペレーティングシステムを介して第1の文字列データを転送可能なインターフェイスオブジェクトとを有し、
前記インターフェイスオブジェクトは、前記第1のオブジェクトの前記第1の文字列データの宣言された型に関わらず前記第1の文字列データを、当該文字列データ中に含まれるnullデータも含めて文字数をカウントできる基本文字列データとして前記第1の文字列データの実効文字数を求め、前記オペレーティングシステムが転送可能な転送文字列データに前記第1の文字列データを前記実効文字数だけ変換する手段を備えており、
前記第2のオブジェクトは、前記第1の文字列データの宣言された型に関わらず、前記第1の文字列データを前記基本文字列データとして処理を実行する手段を備えていることを特徴とする文字列データ処理システム。 - 請求項7において、前記基本文字列データは、文字数データ付きの文字列データであることを特徴とする文字列データ処理システム。
- 請求項7において、前記アプリケーションプログラムは、nullデータを含む文字列データを処理可能であり、前記第1のオブジェクトは、前記アプリケーションプログラムまたは文字列データを処理可能な周辺装置の種類単位のコントロールオブジェクトであり、前記第2のオブジェクトは、前記コントロールオブジェクトまたは前記周辺装置毎のサービスオブジェクトであることを特徴とする文字列データ処理システム。
- 請求項9において、前記文字列データはバーコードデータであることを特徴とする文字列データ処理システム。
- 請求項9において、前記アプリケーションプログラムはPOSアプリケーションプログラムであることを特徴とする文字列データ処理システム。
Priority Applications (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000403300A JP3915876B2 (ja) | 2000-12-28 | 2000-12-28 | 文字列データの処理方法および処理装置 |
US10/026,336 US7055155B2 (en) | 2000-12-28 | 2001-12-20 | Character string processing method, processing system, and object program therefor |
AT01130279T ATE299606T1 (de) | 2000-12-28 | 2001-12-20 | Verfahren, system und objektprogram zur verarbeitung von zeichenketten |
ES01130279T ES2243384T3 (es) | 2000-12-28 | 2001-12-20 | Metodo para el tratamiento de cadenas de caracteres, sistema de tratamiento y programa objeto para ello. |
EP01130279A EP1220093B1 (en) | 2000-12-28 | 2001-12-20 | Character string processing method, processing system, and object program therefor |
DE60111916T DE60111916T2 (de) | 2000-12-28 | 2001-12-20 | Verfahren, System und Objektprogram zur Verarbeitung von Zeichenketten |
KR1020010086328A KR100600217B1 (ko) | 2000-12-28 | 2001-12-27 | 문자열 처리 방법, 문자열 처리 시스템 및 컴퓨터 판독가능 기록 매체 |
CNB011447877A CN1149471C (zh) | 2000-12-28 | 2001-12-27 | 字符串处理方法和处理系统 |
HK03101128A HK1049048A1 (en) | 2000-12-28 | 2003-02-17 | Character string processing method and processing system. |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000403300A JP3915876B2 (ja) | 2000-12-28 | 2000-12-28 | 文字列データの処理方法および処理装置 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002202892A JP2002202892A (ja) | 2002-07-19 |
JP2002202892A5 JP2002202892A5 (ja) | 2005-05-26 |
JP3915876B2 true JP3915876B2 (ja) | 2007-05-16 |
Family
ID=18867453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000403300A Expired - Fee Related JP3915876B2 (ja) | 2000-12-28 | 2000-12-28 | 文字列データの処理方法および処理装置 |
Country Status (9)
Country | Link |
---|---|
US (1) | US7055155B2 (ja) |
EP (1) | EP1220093B1 (ja) |
JP (1) | JP3915876B2 (ja) |
KR (1) | KR100600217B1 (ja) |
CN (1) | CN1149471C (ja) |
AT (1) | ATE299606T1 (ja) |
DE (1) | DE60111916T2 (ja) |
ES (1) | ES2243384T3 (ja) |
HK (1) | HK1049048A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8055483B1 (en) * | 2005-11-28 | 2011-11-08 | The Mathworks, Inc. | System and method for performing hybrid expression evaluation |
JP2010277440A (ja) * | 2009-05-29 | 2010-12-09 | Internatl Business Mach Corp <Ibm> | プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム |
CN102915215B (zh) | 2011-08-03 | 2015-05-27 | 精工爱普生株式会社 | 控制装置以及控制方法 |
JP5906620B2 (ja) * | 2011-09-08 | 2016-04-20 | セイコーエプソン株式会社 | 制御装置の制御方法 |
CN105242932B (zh) * | 2015-10-21 | 2018-08-31 | 宁波三星医疗电气股份有限公司 | 一种基于delphi工具开发的软件的自动翻译方法 |
CN112307034B (zh) * | 2020-11-23 | 2023-02-07 | 华立科技股份有限公司 | 一种集中器的数据收集方法及相关装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5263162A (en) | 1990-11-07 | 1993-11-16 | Hewlett-Packard Company | Method of validating a label translation configuration by parsing a real expression describing the translation configuration |
EP0762273B1 (en) | 1995-09-06 | 2002-05-15 | Seiko Epson Corporation | Peripheral device control system using a plurality of objects |
JPH0973395A (ja) | 1995-09-06 | 1997-03-18 | Seiko Epson Corp | 複数のオブジェクトを用いた制御システム、その構築方法および周辺装置制御システム |
JPH09106355A (ja) | 1995-10-12 | 1997-04-22 | Seiko Epson Corp | 複数のオブジェクトを用いた制御システム、その構築方法および周辺装置制御システム |
GB2330222B (en) * | 1997-10-08 | 2003-03-05 | Mitel Corp | Methods of Communicating Control and/or Data Sginals Between First and Second Data processing Environments |
WO2000045256A1 (en) * | 1999-01-29 | 2000-08-03 | Iona Technologies, Inc. | Method and system for dynamic configuration of interceptors in a client-server environment |
-
2000
- 2000-12-28 JP JP2000403300A patent/JP3915876B2/ja not_active Expired - Fee Related
-
2001
- 2001-12-20 DE DE60111916T patent/DE60111916T2/de not_active Expired - Lifetime
- 2001-12-20 US US10/026,336 patent/US7055155B2/en not_active Expired - Lifetime
- 2001-12-20 EP EP01130279A patent/EP1220093B1/en not_active Expired - Lifetime
- 2001-12-20 ES ES01130279T patent/ES2243384T3/es not_active Expired - Lifetime
- 2001-12-20 AT AT01130279T patent/ATE299606T1/de not_active IP Right Cessation
- 2001-12-27 CN CNB011447877A patent/CN1149471C/zh not_active Expired - Fee Related
- 2001-12-27 KR KR1020010086328A patent/KR100600217B1/ko not_active IP Right Cessation
-
2003
- 2003-02-17 HK HK03101128A patent/HK1049048A1/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
US20020194073A1 (en) | 2002-12-19 |
CN1365046A (zh) | 2002-08-21 |
ATE299606T1 (de) | 2005-07-15 |
DE60111916D1 (de) | 2005-08-18 |
EP1220093A3 (en) | 2003-04-16 |
ES2243384T3 (es) | 2005-12-01 |
KR100600217B1 (ko) | 2006-07-13 |
DE60111916T2 (de) | 2006-04-20 |
CN1149471C (zh) | 2004-05-12 |
HK1049048A1 (en) | 2003-04-25 |
JP2002202892A (ja) | 2002-07-19 |
KR20020055426A (ko) | 2002-07-08 |
EP1220093B1 (en) | 2005-07-13 |
US7055155B2 (en) | 2006-05-30 |
EP1220093A2 (en) | 2002-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TW543004B (en) | Job transmission method between computers and the job transmission system | |
US5826017A (en) | Apparatus and method for communicating data between elements of a distributed system using a general protocol | |
EP0942362B1 (en) | Remote procedure calling with marshaling and unmarshaling of arbitrary non-conformant pointer sizes | |
US7136941B2 (en) | Print management architecture for computing devices having a set of filters functions wherein the functions are prevented from conflicting with one another | |
KR101505660B1 (ko) | 프로그램 스크립팅 언어를 이용하는 라벨 프린터 api | |
EP0924615A2 (en) | Marshaling and unmarshaling framework for supporting filters in a distributed object system | |
IL134141A (en) | Computerized system and associated method for optimally controlling storage and transfer of computer programs on a computer network | |
US6249803B1 (en) | Method and apparatus for executing code during method invocation | |
JP3915876B2 (ja) | 文字列データの処理方法および処理装置 | |
Merz | PostScript & Acrobat/PDF: applications, troubleshooting, and cross-platform publishing | |
US8230403B2 (en) | Typed-data translation for platform independence | |
JP3974782B2 (ja) | ディジタル印刷データストリームを変換する方法および装置、ならびに対応するプリンタおよびプリンタサーバ | |
WO2001044923A2 (en) | A system and method for modifying output of a computer program without source code modifications | |
JPH1173381A (ja) | 画像送信装置、画像受信装置および画像処理システム、並びに文書・画像フォーマット | |
Weigert et al. | Automated generation of marshaling code from high-level specifications | |
JPH11353164A (ja) | ソースプログラム生成システムおよびソースプログラム生成方法ならびにチャート生成システムおよびチャート生成方法 | |
JP2004234405A (ja) | プロトコル符号化/復号化装置 | |
JP2007122278A (ja) | 文書処理装置及びその方法、プログラム | |
JP2002032285A (ja) | 画像送信装置、画像受信装置、画像処理システムおよび記憶媒体並びに画像送信方法、画像受信方法および画像処理方法 | |
TW480445B (en) | Method for downloading application programs on the compiler system platform of an electronic communication device | |
JP2787093B2 (ja) | プリンタ装置 | |
FI115863B (fi) | Systeemi ja menetelmä sovelluksen ja tietoliikenneväylän välisen datavirran käsittelemiseksi tietokoneohjatussa ohjausjärjestelmässä | |
Kohler et al. | Evolving Software with an Application-Specific Language | |
Goyal et al. | iostreams | |
Jerman-Blažič | Tool supporting the internationalisation of the generic network services |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040726 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040726 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060704 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060829 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20060829 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070117 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070130 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110216 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110216 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120216 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130216 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130216 Year of fee payment: 6 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |