CN1365046A - 字符串处理方法,处理系统,以及其对象程序 - Google Patents
字符串处理方法,处理系统,以及其对象程序 Download PDFInfo
- Publication number
- CN1365046A CN1365046A CN01144787A CN01144787A CN1365046A CN 1365046 A CN1365046 A CN 1365046A CN 01144787 A CN01144787 A CN 01144787A CN 01144787 A CN01144787 A CN 01144787A CN 1365046 A CN1365046 A CN 1365046A
- Authority
- CN
- China
- Prior art keywords
- data
- string
- string data
- character
- character string
- 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.)
- Granted
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Finance (AREA)
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Cash Registers Or Receiving Machines (AREA)
- Communication Control (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Processing Or Creating Images (AREA)
- Character Input (AREA)
- Machine Translation (AREA)
- Programmable Controllers (AREA)
Abstract
在无需使用复杂处理过程并且也无需改变由控制对象或服务对象说明的字符串类型的情况下,包含空的字符串可以可靠地在对象之间传递。用于将字符串从控制对象(32)传递至服务对象(33)的接口对象将从控制单元(32)接收到的字符串转换成BSTR类型,即使所接收到的字符串是LPCTSTR类型,该接口对象还确定字符串中字符数量,并在不舍弃字符串中任何字符的前提下将字符串转换为宽字符,并且创建一COM标准BSTR类型宽字符字符串。因此,字符串中的空值(0x00)以及所有随后的字符能可靠地被传递至服务对象(33)。
Description
技术领域
本发明涉及一种采用软件对象构件的字符串处理方法和处理系统。
背景技术
采用面向对象程序语言的基于构件程序(对象)是运行于一特殊操作系统的可重用软件对象。采用对象更易于发展多种系统和应用。例如,MicrosoftWINDOWS操作系统支持的构件对象模型(COM)是一个可提供一环境的多功能系统,在该环境下客户应用程序(容器应用程序)可使用和共享对象。
通过发展基于COM对象的系统,软件产品能作为可重用部分使得单用户可建立定制系统并减少维持费用。此设计模型也使得现有的软件资源能进一步发展和演化,使得系统更易发展并减少相关发展费用。在一构件基础上发展对象的能力也简化了发展一包括不同子系统或不同外设的复杂系统,并且对于在网络环境中运行的系统的发展是必需的。
一POS(销售点)系统是一种由不同外部设备组合而成的系统。一典型的POS系统包括一显示设备、一打印机、扫描仪、收银机抽屉、读卡器以及其他的与个人计算机或其他中心主机连接的输入/输出设备。在JP-A-9-106355和JP-A-9-73395中,我们先前披露了一灵活的个人计算机—基于采用对象而建立的POS系统。
图1表示一分布式对象POS系统10的原理图。此POS系统10包括一由系统制造商提供的POS应用程序11;为诸如打印机21,扫描仪22,收银机抽屉23,或其它类型的外设这样的特殊类型设备(设备类)提供的控制对象(CO)12;以及为一特殊设备提供的服务对象13(SO)。当POS应用程序11要从打印机21中打印时,数据首先发送至打印机控制对象12,接着发送至服务对象13以使数据将可从特殊构造或者模型的打印机中打印出来,然后从操作系统(OS)14发送至打印机21。
POS应用程序11也能采用显示器15、键盘16、以及个人计算机的其他硬件资源作为经由OS 14的POS应用程序11的外部设备。
包括如图1中POS系统的控制对象12和服务对象13的对象控制系统19提供带有一独立于特殊外设(如打印机21)的接口的POS应用程序11。由于控制对象12为特殊设备类而开发,当POS应用程序11运行时,OS 14支持的COM创建一控制对象实例,并且控制对象实例受POS应用程序11控制。服务对象13提供一个独立于特殊设备的与控制对象12一致的接口;当一特殊设备被称为控制对象12时,一服务对象实例由POS应用程序11创建并受其控制。
在基于系统的COM中,例如,可将事件返回给程序11的ActiveX控件(OLE控件)能用于控制对象12,并且作为ActiveX控件服务器的ActiveX服务器(OLE自动化服务器)可用作服务对象13。COM支持自动受控的对象间也就是,为运行应用程序而受控的对象实例间的数据通信。“自动化服务器”是包括属性和方法的软件对象,并且“自动化”是用于公开或操作对象的机制。
自动化独立于COM IDispatch接口,而且对象间通信通过运行Invoke方法完成。IDispatch是一用于公开ActiveX控件和ActiveX服务器方法以及用于COM兼容编程语言的属性的接口。Microsft基本类库(MFC)提供了带有基于VisualC++(R)的自动函数的发展环境,由微软出版的面向对象的编程语言,因此Microsoft基本类库(MFC)提供了COLeDispatchDriver基类(对象)用于处理复杂的从应用程序或客户端对象中调用Invoke函数。客户端对象因此可通过调用InvokeHelper向服务器对象发送数据,InvokeHelper是从基类处获得的接口对象的成员函数。也就是说,为了使用Invoke函数必须运行一特殊进程,并且包括此预先定义的进程的InvokeHelper函数被提供用来帮助调用Invoke函数。此预先定义的进程包括,例如,从一列表中读变量和基于这些变量运行一进程,将Invoke结果转换成一方法,或当一非法进程运行时则作为异常事件。
图2给出了从一POS应用程序11至一设备(打印机)21的数据流示意图。为了在打印机21上打印文本数据,POS应用程序11调用打印机控制对象12的打印方法并且将文本数据传送至打印方法。为了给打印机21调用服务器对象13,控制对象12调用COLeDispatchDriver类(接口对象(IFO)18)的InvokeHelper成员函数。然后,数据通过接口对象18传送至服务对象13,并且通过OS 14传送至打印机21。
存在一个问题:假如诸如有时被包括在条形码数据中的一空字符(0x00为16进制表示法;所有以下标记的字符数据也为16进制表示法)存在于文本数据中(字符串),字符串将不能再现在POS系统10的打印机21上。在POS系统中的打印机控制对象12典型地具有一PrintBarCode方法,并且假如包含含一空(0x00)字符的数据字符串被特别作为PrintBarCode方法的数据参数,那么数据字符串将通过以下处理。
首先,POS应用程序11发送以下字符串A0至控制对象12。
A0: 7B 41 00 30 31 32 33 34 35 36 37 38 39
控制对象12以被说明为LPCTSTR类型接收字符字符串A0。LPCTSTR是指向一空结束(0x00)8比特ANSI(美国国家标准协会)字符串的指针,也是一字符字符串Shift JIS(日本工业标准)定义字符。因此字符串中间不允许一空(0x00)字符。当不试图打印作为图像数据的字节数据打印时,空(0x00)不包含在可打印字符中,而且字符串数据在打印机对象中通常被说明为LPCTSTR类型。
然而,在COM环境中,COM支持应用—对象并且对象—对象数据与通过COM传送的字符串一起传输以作为BSTR字符串,也就是,包含字符串长度(字符计数)说明的基本字符串或二进制字符串。字符串A0因此转换为A1:A1:0D 00 00 00 7B 41 00 30 31 32 33 34 35 36 37 38 39 00
因此BSTR字符串以写到第一个四字节的字符串长度起始,以00(不包括在字符串长度(字符计数)中)结束。注意,然而,00此处并非结束字符。数据存储根据来自指针的字符数量而管理,以至即使包含在字符串中的空值(0x00)也作为字符数据对待。
为了控制对象12调用服务对象13的打印输出方法,控制对象首先调用COLeDispatchDriver类(作为一MFC库提供的接口对象18)的InvokeHelper成员函数,并且InvokeHelper如下调用InvokeHelperV:void COLeDispatchDriver∷InvokeHelperV(DISPID dwDispID,WORDwFlags,VARTYPE vtRet,Void*pvRet,const BYTE*pbParaminfo,va_list argList)其中参数定义如下。.dwDispID:标识方法或属性以被调用。.wFlags:描述调用IDispatch∷Invoke前后关系的标识。.vtRet:区分返回值的类型。.pvRet:接收属性值或返回值的变量地址。.pbParaminfo:指向区分存储在pbParamInfo之后的argList中的参数类型的空结束字符串的指针。.argList:参数列表。因此COLeDispatchDriver∷InvokeHelperV按照如下转换一字符串。LPCSTR 1psz=Va_arg(argList,LPSTR);PArg>bstrVal=∷SysAllocString(T2COLE(1psz));If(1psz!=NULL&&pArg>bstrVal=NULL)
AfxThowMemoryExceptionO;PArg>vt=VT_BSTR;由于经过控制对象12的字符串1psz由8比特的Shift JIS(多字节字符)LPCTSTR说明,字符转换宏T2COLE被自动选择而且字符被转换成16比特宽字符(统一的字符编码标准),通过COM.T2COLE传递的基本传输字符串类型被定义为用于创建用在Visual C++中的ActiveX控件的模型库(ATL:活动模板库)。
以上第一线程从参数列表中读数据参数,并且数据实际上由下一线程转换。字符转换宏T2COLE调用AfxA2Whelper函数,其中MultiByteToWideChar将数据转换为如下所示的宽字符。A2:7B 00 41 00 00 00
也就是,由于控制对象12说明采用空结束LPCTSTR类型的字符串,包含在字符串中的空(0x00)字符被认为用来结束一字符串。结果是一宽字符(LPCTSTR)类型的一字符串不包含00之后的任何数据并且删除00之后的一切。字符串然后被SysAllocString转换为字符串中包含关于字符(实际上是字节)数目的数据的BSTR类型,并通过COM传递至服务器对象13。在加入四字符串长度字节之后,传递至服务器对象13的数据如下:A3:04 00 00 00 7B 00 41 00 00 00如同控制对象12,服务器对象13也采用LPCRSTR来说明字符数据,并且根据由COM说明的字符串数据类型来接收8比特单元数据。因此数据对象接收:A4:7B 41 00由服务对象13控制的打印机因此不能打印由应用程序11所指定的数据,只能打印部分指定数据(也就是,所接收到的数据A4)。当由COM发送的字符串数据是BSTR类型并且字符串A4被转换并被处理为BSTR类型时,在存储器中的数据仅仅包含如下所示的BSTR类型的字符串长度信息,并且当从控制对象12传送来的数据被丢失时该数据被忽略。A5:02 00 00 00 7B 41 00因此很明显,假如控制对象12接收来自POS应用程序11的被说明为包含一空(0x00)字符的LPCTSTR类型的字符串数据,此字符串数据不能被发送至服务对象13且不能在打印机21上正常输出。
此外,改变控制对象或服务对象中说明的字符串数据类型不能用于面向对象POS系统中,此系统希望向应用程序提供一致接口并且希望统一在对象间和应用程序与对象间所交换的参数。从保护当前用户软件资源的角度来看它也是不可取的。
存在这样的方法:在数据传输之前,采用二进制转换有效的将空值(0x00)转换为一些其它值,然后在随后的对象中重建空值(0x00)。然而,除了复杂之外,不同对象使用的转换进程必须匹配,接收对象因此取决于发送对象的设计(操作)很明显与面向对象编程的目标相反,也就是说,提高了软件的复用性和模块性。此外,如果接收对象不能处理二进制转换数据,它可能输出一个完全不同的字符串。
因此处理包含空值(0x00)的字符串数据面临一些困难。然而,为了建立一个能处理条形码和其他不同数据类型的POS系统,准确的将包含空值(0x00)的字符数据发送至用于通过一打印机或其他设备的输出服务对象这是必须的。
发明内容
因此,本发明的一个目的就是提出了一种字符数据处理方法,处理系统,和对象程序,由此即使当字符串包含空值(0x00)数据时,在无需改变控制对象或服务对象或完成其它复杂操作的字符串类型说明情况下,字符串数据也能在对象间准确发送。
为实现以上对象,当应用程序依靠接口对象中的一步骤运行时,其中该步骤用于将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空值(0x00)数据的字符数目是可计数的而不管第一对象的第一字符串数据的说明类型,该步骤并检测作为基本字符串的第一字符串中的包括空字符的字符数目,且将第一字符串中的字符数目转换成可在操作系统中传递的字符串数据,本发明则通过运行在计算机操作系统(如上面提到的COM)下的接口对象将第一字符串从客户端或第一对象(如控制对象)传递至服务器或第二对象(如服务对象)。第二对象中的一步骤对作为基本字符串数据的第一字符串数据进行处理而不管第一字符串数据的说明类型。
因此,在根据本发明的字符串数据处理系统中,该字符串数据处理系统具有一客户端或第一对象,相对于第一对象而言是一个服务器的第二对象、以及一个接口对象,该字符串数据处理系统用于通过一个接口对象将第一字符串从第一对象传递至运行于应用程序中的第二对象,该接口对象具有一装置,该装置用于将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空值(0x00)数据的字符数目是可计数的而不管由第一对象所说明的第一字符串数据的类型,该装置还用于检测作为基本字符串的第一字符串中的有效字符数目,并将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据。第二对象具有一装置,该装置用于对作为基本字符串数据的第一字符串数据处理而不管第一字符串数据的说明类型。
基本字符串数据是包含有字符长度信息的字符串数据,例如COM支持的BSTR类型字符串数据。
以上数据传输问题并不局限于对象一对象通信,也可能发生在在应用程序和对象之间传输数据时。因此这些问题也会发生在写应用程序时,例如,在VisualC++中使用MFC。(注意当用由Microsoft出版的Visual Basic写应用程序时,不会发生以上问题,因为MFC在这种编程语言中不被使用)。因此,第一对象是应用程序或外部设备类控制对象;第二对象是控制对象或外部设备服务对象。因此本发明可通过将应用程序作为第一对象而适用于应用程序。因此,如下所用的一对象包括当应用程序运行时与COM约束机制相连结的对象的实例,除非特别注明对象与实例之间无区别。
因此,即使当由一对象所说明的字符串类型假定字符串中不包含空(0x00)数据时,本发明的字符串数据处理方法和系统能在对象间有效传递字符串中包含空(0x00)数据的字符串数据。本发明的方法和系统因此在不改变由传统对象说明的数据类型情况下,可以处理条形码数据和其他可能包含空(0x00)数据的字符串数据。基于对象的POS系统可有效处理条形码数据并且利用本发明因此可提出其它不同数据类型。
当运行应用程序时,本发明的第一对象可为一客户端对象程序。此对象程序有一步骤,该步骤通过调用一接口对象将第一字符字符串数据传递至与客户端相关的服务器对象,该接口对象能通过操作系统将第一字符串数据传递至服务器对象。此步骤有一个用于运行一进程的可执行命令,该命令调用接口对象以将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空值(0x00)数据的字符数目是可计数的而不管第一字符串数据的说明类型,该步骤并检测作为基本字符串的第一字符串中的有效字符数目,且将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据。此对象程序可记录于一专用计算机可读数据存储介质中,例如磁盘。
当运行应用程序时,本发明的第二对象可为一服务器对象程序。此对象程序有一可执行指令用于处理第一字符串数据以作为基本字符串数据,第一字符串数据从一客户端对象通过运行在操作系统中的接口对象传递至服务器对象,由此字符串数据中包括空(0x00)数据的字符数目是可计数的而不管第一字符串数据的说明类型。此对象程序也可记录于一专用计算机可读数据存储介质中。
当运行应用程序时,根据本发明的接口对象可为一接口对象程序,该接口对象程序用于将第一字符串通过计算机操作系统从一客户端或第一对象传递至一服务器或第二对象。此接口对象有一可执行命令,该命令用于将第一字符字符串数据转换为基本字符串数,由此字符串数据中包括空值(0x00)数据的字符数目是可计数的而不管第一字符串数据的说明类型,该命令还用于检测作为基本字符串的第一字符串中的有效字符数目,且将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据。和以上对象程序一样,此接口对象程序也可记录于一专用计算机可读数据存储介质中。
附图简述
在以下结合附图对最佳实施例的描述中,其他对象以及通过对本发明更充分的理解而达到的成就将会明显且可理解,其中:
图1描述基于POS系统的一对象服务的原理图;
图2给出了在一应用程序和对象间传输字符串的处理过程;
图3给出了本发明处理控制对象,接口对象和服务器对象的原理图。
发明的具体实施方式
下面将参照图1和图2描述本发明基于由分布式对象建立的POS系统10。为了将本发明应用于POS系统10,首先从MFC ColeDispatchDriver类中得到一CCoOleDispatchDriver类接口,然后如下覆盖接口对象的数据转换部分。
LPCTSTR 1psz=va_arg(argList,LPSTR); Long 1Len=∷SysStringByteLen((BSTR)1psz); Long 1DestLen=1Len+1; LPWSTR pWideChar=(LPWSTR)CoTaskMemAlloc(1DestLen*2*sizeof(WCHAR)); Long 1TrueLen; If(1Len) { 1TrueLen=MultiByteToWideChar(CP_ACP,0,1psz,1Len,pWideChar;1Len); } else { 1TrueLen=MultiByteToWideChar(CP_ACP,0,1psz,0,pWideChar,1DestLen); } pArg->bstrVal=∷Sys StringByteLen(pWideChar,1TrueLen); CoTaskMemFree((void*)pWideChar); If(1psz!=NULL&&pArg->bstrVal=NULL) AfxThrowMemoryException(); PArg->vt=VT_BSTR;
此数据转换进程操作如下。首先,从参数列表argList中读出字符串参数,并将其分配至类型LPCSTR的字符串1psz。以下线程使得字符串1psz为BSTR类型,并确定字符串的长度(字符计数),包括可能存在在字符串中的任何空(0x00)字符。为确保字符串长度1Len不为0,给1Len加1,并且存储器被备用以便将字符串转换为宽字符,也就是,统一的字符编码标准字符(COM使用的标准字符码)。然后,字符串1psz被转换为采用由1Len制定的字符串长度的宽字符,而且结果存储在LPWSTR类型的宽字符字符串pWideChar中。
字符串然后被转换成BSTR类型参数pArg为了可通过COM传输至服务对象,字符串采用由1Len制定的字符串长度的宽字符。在转换完成之后,为宽字符所备用的存储器被释放。假如有一非法参数则作为一异常事件。传递至服务对象的字符串pArg然后被设置为类型BSTR。
因此,POS系统30的总体配置与图1所示相同,但在控制对象32、接口对象38和服务对象33中的数据处理如图3所示。当POS应用程序11调用步骤51中用于打印一条形码的PrintBarCode方法并且传递如下所示的包含空(0x00)数据的一字符字符串时,控制对象32接收一个如下所示的BSTR类型的字符串A1。A0:7B 41 00 30 31 32 33 34 35 36 37 38 39A1:0D 00 00 00 7B 41 00 30 31 32 33 34 35 36 37 38 39 00
为了将条形码字符串传递至服务对象,控制对象32不调用ColeDispatchDriver函数,而是调用CCoOleDispatchDriver类InvokeHelper函数,ColeDispatchDriver函数是如上所述的覆盖转换函数的一接口对象38。Void CcoOleDispatchDriver∷InvokeHelperV(DISPID dwDuspID,WORDwFlags,VARTYPE vtRet,Void*pvRet,const BYTE*pbParamInfo,va_list argList)
如上所示,接口对象38接收来自控制对象32的说明类型为LPCTSTR的字符串1psz,但是转换字符串LPSZ为类型BSTR以检测字符串长度(步骤53)。然后,接口对象38在不舍弃经由COM传输(步骤54)的字符串长度数据的情况下,将字符串转换为宽字符,并且基于BSTR类型宽字符串设置传送到服务对象33的参数pArg(步骤55)。因此,在此实施例中的接口对象38输出如下所示的一字符串。
首先,通过规定字符串长度并且将字符串转换成使用MultiByteToWideChar字符串转换函数的宽字符,在步骤54中将字符串A1转换成字符串A2。A2′: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 0038 00 39 00 00 00
在此实施例中,作为说明字符串A1长度的结果,与以上传统的转换字符串A2相比,在字符串A1中所有空值(0x00)之后的数据都转换为宽字符。此宽字符串在步骤55中通过SysAllocStringLen字符转换宏被转换为可通过COM传输的统一的字符编码标准字符的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 00 3700 38 00 39 00 00 00
作为以上转换进程的结果,所有来自POS应用程序11的字符串数据,包括空值(0x00),都传送至服务对象33。
然而,由于用于接收字符串数据的参数pData被说明为一空结束LPCTSTR类型,服务对象33接收以下字符串A4。A4:7B 41 00
因此很明显,假如字符串被处理为说明的LPCTSTR类型,在空值(0x00)之后的所有数据将被舍弃并且不被处理。然而,当如上所述的字符串数据通过COM被传递时,存储器中数据以BSTR类型被传递至接收对象。这意味着在服务对象中参数类型通过函数标准(函数类型定义)简单地被说明为LPCTSTR并且实际数据为BSTR类型。在字符串A4之前和之后的存储器中实际数据为如下所示的A5′:A5′:0D 00 00 00 7B 41 00 30 31 32 33 34 35 36 37 38 39 00
如同处理BSTR类型数据一样,在步骤56中服务对象33因此处理被说明为LPCTSTR类型的参数pData。IdataLen=SysStringByteLen((BSTR)pData);Cstring strBinaryData(pData,IdataLen);
也就是,说明为LPCTSTR类型的参数pData被转换为BSTR类型,字符串长度被检测,而且MFC Cstring类被设置为用于打印的字符串长度IdataLen的pData。其结果是,在不去除空(0x00)和随后数据的情况下,由POS应用程序11提供的包含空(0x00)的字符串从服务对象33被发送至打印机,并且可由打印机输出。
当用于通过COM将数据从控制对象32传递至服务对象33的接口对象38来自MFC基本类,接口对象38能将LPCTSTR类型的空结束字符串转换为包含字符串长度信息也包含空字符(00)的BSTR类型数据,这样字符的实际数目(有效字符串长)可被确定。字符的数目因此可被转换成宽字符而不管LPCTSTR字符串类型,并且数据可被转换成可被COM处理的标准统一的字符编码字符串。
因此很明显,本发明可准确地将包含空(0x00)的字符串数据在对象之间传递,尽管当数据通过COM在对象之间传递,假如数据被说明为LPCTSTR类型或其它空结束字符串数据时,来自MFC类库的传统的接口对象则舍弃空(0x00)之后的所有数据。当应用程序的编程者使用来自MFC类的接口对象代替marshelling(用于调用一方法的机制,例如,通过COM),也就是,通过使用本发明的接口对象,在不舍弃空(0x00)和随后的数据的情况下应用程序可将包括空(0x00)的数据发送至控制对象。
因为在控制对象和服务对象中可避免常规情况下当字符字符串被说明为LPCTSTR类型时与空(0x00)数据有关的问题,因此不必改变为应用程序提供统一API的分布式对象POS控制系统的规格标准。因此,本发明使得应用程序提供者和程序使用者在不浪费现存的软件资源的前提下能充分利用可以处理包括空(0x00)字符串数据的POS控制系统。
如上所述,存在这样的方法,由此常规接口对象通过使用二进制转换将空(0x00)强制转换成另一值而能强制处理包含空(0x00)的字符串数据,将转换后的数据发送至另一对象,然后接收对象恢复空值(0x00)。然而,这不仅是一复杂进程,发送和接收对象的转换操作必须匹配,而且接收对象取决于发送对象。然而,由于它与面向对象编程的模块化和复用性目的相悖,此技术难以实现。此外,假如接收对象不能处理二进制转换后数据,它应输出一完全不同的字符串。
采用如上所述的本发明方法,然而,空值(0x00)以及随后的数据无需二进制转换便可被传送至另一对象。这样数据可通过接收对象被处理为空结束字符串数据,或者数据可被转换和处理为包含空(0x00)的BSTR类型。例如,用于处理不包含二进制数据的字符串数据的方法可将数据处理为空结束字符串数据,同时处理包含二进制数据的方法将字符串数据转换为BSTR类型进行处理。因此,当对现有对象无影响时,可提供一个能处理空(0x00)数据的控制系统。
此POS控制系统39的控制对象32,服务对象33,和接口对象38可存储在一压缩磁盘(CD)或其它类型的计算机可读数据存储介质中以作为具有执行如图3所示的各个步骤的命令的计算机程序。通过在由计算机的OS 14管理的存储器中安装程序以及调用对象的方法和属性,对象实例被产生并一定用于执行所希望的应用程序处理。
值得注意的是,由于条形码的宽范围和被典型的POS系统处理的其他数据,参照POS系统描述的本发明与实际处理空(0X00)数据的应用有很大的相似性和可模仿性,本发明不局限于POS系统,很明显可用于其他处理字符串数据的系统。
由以上描述可推知,本发明无需使用将字符串数据转换成特殊格式的二进制转换,便可使得字符串中包含空(0X00)的字符串数据准确的在对象之间传递。因此,本发明能作为一个对象服务的方法和系统,用于处理诸如条形码数据这样的在字符串中可包含空(0X00)的字符串数据。本发明还能提供一软件发展装置使得POS系统或其它系统可处理多种数据类型。
Claims (20)
1、一字符串数据处理的方法,该方法用于当运行一应用程序时通过运行在计算机操作系统下的一接口对象将第一字符串从一客户端或第一对象传递至一服务器或第二对象,该方法包括:
在接口对象中,将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空值数据的字符数目是可计数的而不管第一对象的第一字符串数据的说明类型,并检测作为基本字符串的第一字符串中的包括空字符的字符数目,且将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据;以及
在第二对象中,对作为基本字符串数据的第一字符串数据进行处理而不管第一字符串数据的说明类型。
2、如权利要求1所述的方法,其中基本字符串数据是包含字符串长度信息的字符串数据。
3、如权利要求1所述的方法,其中应用程序能处理包含空数据的字符串数据;第一对象是应用程序或一外部设备类控制对象,外部设备能处理字符串数据;以及
第二对象是一外部设备类控制对象或一外部设备类服务对象。
4、如权利要求3所述的方法,其中字符串数据是条形码数据。
5、如权利要求3所述的方法,其中应用程序是一POS应用程序。
6、一字符串数据处理系统,包括一客户端或第一对象,相对于第一对象而言是一个服务器的第二对象、以及一个接口对象,该接口对象用于将第一字符串从第一对象传送至运行应用程序的第二对象,其中:
该接口对象包括一装置,该装置用于将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空值(0x00)数据的字符数目是可计数的而不管由第一对象所说明的第一字符串数据的类型,该装置还用于检测作为基本字符串的第一字符串中的有效字符数目,并将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据。
第二对象具有一装置,该装置用于对作为基本字符串数据的第一字符串数据进行处理而不管第一字符串数据的说明类型。
7、如权利要求6所述的方法,其中基本字符数据是一包括字符长信息的字符串数据。
8、如权利要求6所述的方法,其中应用程序能处理包含空数据的字符字符串数据;
第一对象是应用程序或一外部设备类控制对象,外部设备能处理字符字符串数据;而且
第二对象一外部设备类控制对象或一外部设备类服务对象。
9、如权利要求8所述的方法,其中字符字符串数据是条形码数据。
10、如权利要求8所述的方法,其中应用程序是一POS应用程序。
11、一对象程序,当运行一应用程序时该对象程序是一客户端对象,该对象程序包括:
通过调用一接口对象将第一字符数据传递至与客户端相关的一服务器对象,其中的接口对象可以将第一字符串数据通过操作系统传递至服务器对象;并且
所述的传递步骤有一个运行一进程的可执行命令,该命令调用接口对象将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空数据的字符数目是可计数的而不管所说明的第一字符串数据的类型,该命令并检测作为基本字符串的第一字符串中的有效字符数目,且将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据。
12、如权利要求11所述的对象程序,其中对象程序是一能处理包含空数据的字符串数据的应用程序,或是一外部设备类控制对象,此外部设备能处理字符字符串数据。
13、如权利要求11所述的对象程序,其中字符字符串数据为一条形码,而且应用程序是一POS应用程序。
14、一对象程序,当运行一应用程序运行时该对象程序是一客户端对象,该对象程序包括一个可执行命令,用于对作为基本字符串数据的第一字符串数据进行处理,由此字符串数据中包括空数据的字符数目是可计数的而不管第一字符串数据的说明类型,其中第一字符串数据从其客户端对象通过运行在操作系统上的接口对象传递至服务器对象。
15、如权利要求14所述的对象程序,其中对象程序是一外部设备类控制对象或一外部设备服务对象,此外部设备能处理字符字符串数据。
16、如权利要求14所述的对象程序,其中字符字符串数据为一条形码,而且应用程序是一POS应用程序。
17、一计算机可读数据存储介质存储有如权利要求11至16中任何一个所述的一对象程序。
18、一接口对象程序,用于当运行一应用程序时通过计算机操作系统将第一字符串从一客户端或第一对象传递至一服务器或第二对象,该接口对象程序包括:
一可执行命令,该命令将第一字符串数据转换为基本字符串数据,由此字符串数据中包括空数据的字符数目是可计数的而不管第一字符串数据的说明类型,该命令并检测作为基本字符串的第一字符串中的有效字符数目,且将第一字符串中的有效字符数目转换成可在操作系统中传递的字符串数据。
19、如权利要求18所述的接口对象程序,其中基本字符数据是一包括字符串长度的字符串数据。
20、一计算机可读数据存储介质存储有如权利要求18或19的一接口对象程序。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000403300A JP3915876B2 (ja) | 2000-12-28 | 2000-12-28 | 文字列データの処理方法および処理装置 |
JP403300/00 | 2000-12-28 | ||
JP403300/2000 | 2000-12-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1365046A true CN1365046A (zh) | 2002-08-21 |
CN1149471C CN1149471C (zh) | 2004-05-12 |
Family
ID=18867453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB011447877A Expired - Fee Related CN1149471C (zh) | 2000-12-28 | 2001-12-27 | 字符串处理方法和处理系统 |
Country Status (9)
Country | Link |
---|---|
US (1) | US7055155B2 (zh) |
EP (1) | EP1220093B1 (zh) |
JP (1) | JP3915876B2 (zh) |
KR (1) | KR100600217B1 (zh) |
CN (1) | CN1149471C (zh) |
AT (1) | ATE299606T1 (zh) |
DE (1) | DE60111916T2 (zh) |
ES (1) | ES2243384T3 (zh) |
HK (1) | HK1049048A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112307034A (zh) * | 2020-11-23 | 2021-02-02 | 华立科技股份有限公司 | 一种集中器的数据收集方法及相关装置 |
CN117973317A (zh) * | 2024-03-29 | 2024-05-03 | 恒生电子股份有限公司 | 字符串信息处理方法、装置、电子设备及存储介质 |
Families Citing this family (5)
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工具开发的软件的自动翻译方法 |
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 |
JPH0973395A (ja) | 1995-09-06 | 1997-03-18 | Seiko Epson Corp | 複数のオブジェクトを用いた制御システム、その構築方法および周辺装置制御システム |
JPH09106355A (ja) | 1995-10-12 | 1997-04-22 | Seiko Epson Corp | 複数のオブジェクトを用いた制御システム、その構築方法および周辺装置制御システム |
DE69621197T2 (de) | 1995-09-06 | 2002-11-07 | Seiko Epson Corp | Peripheriegerätsteuerungssystem mit einer Mehrheit von Objekten |
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 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 AT AT01130279T patent/ATE299606T1/de not_active IP Right Cessation
- 2001-12-20 ES ES01130279T patent/ES2243384T3/es not_active Expired - Lifetime
- 2001-12-20 DE DE60111916T patent/DE60111916T2/de not_active Expired - Lifetime
- 2001-12-27 KR KR1020010086328A patent/KR100600217B1/ko not_active IP Right Cessation
- 2001-12-27 CN CNB011447877A patent/CN1149471C/zh not_active Expired - Fee Related
-
2003
- 2003-02-17 HK HK03101128A patent/HK1049048A1/xx not_active IP Right Cessation
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112307034A (zh) * | 2020-11-23 | 2021-02-02 | 华立科技股份有限公司 | 一种集中器的数据收集方法及相关装置 |
CN117973317A (zh) * | 2024-03-29 | 2024-05-03 | 恒生电子股份有限公司 | 字符串信息处理方法、装置、电子设备及存储介质 |
CN117973317B (zh) * | 2024-03-29 | 2024-06-07 | 恒生电子股份有限公司 | 字符串信息处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US7055155B2 (en) | 2006-05-30 |
KR20020055426A (ko) | 2002-07-08 |
ES2243384T3 (es) | 2005-12-01 |
EP1220093A3 (en) | 2003-04-16 |
EP1220093A2 (en) | 2002-07-03 |
US20020194073A1 (en) | 2002-12-19 |
CN1149471C (zh) | 2004-05-12 |
ATE299606T1 (de) | 2005-07-15 |
JP3915876B2 (ja) | 2007-05-16 |
DE60111916D1 (de) | 2005-08-18 |
KR100600217B1 (ko) | 2006-07-13 |
JP2002202892A (ja) | 2002-07-19 |
DE60111916T2 (de) | 2006-04-20 |
HK1049048A1 (en) | 2003-04-25 |
EP1220093B1 (en) | 2005-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7028312B1 (en) | XML remote procedure call (XML-RPC) | |
US20020046294A1 (en) | Common application metamodel including C/C++ metamodel | |
US5944781A (en) | Persistent executable object system and method | |
US7624398B2 (en) | Accelerating a distributed component architecture over a network using a modified RPC communication | |
US7689709B2 (en) | Native format tunneling | |
EP0767563B1 (en) | Method and apparatus for multiprotocol operation in a client/server system | |
US6405264B1 (en) | Marshaling and unmarshaling framework for supporting filters in a distributed object system | |
US5784544A (en) | Method and system for determining the data type of a stream of data | |
JPH1063505A (ja) | 引数オブジェクトリファレンスをマーシャリングおよびアンマーシャリングするフレームワーク | |
CN1277387A (zh) | 监视和处理数据处理系统中相关线程事件的方法和设备 | |
US20100011280A1 (en) | Forms Management System | |
US6516354B2 (en) | Method and apparatus for efficient representation of variable length identifiers in a distributed object system | |
JP2553220B2 (ja) | データの転送方法及びシステム | |
CN1149471C (zh) | 字符串处理方法和处理系统 | |
US7689986B2 (en) | Shared listeners in shared object space | |
KR20010041227A (ko) | 분산 시스템에서 정보를 동적으로 증명하기 위한 장치 및 방법 | |
US5838971A (en) | Process for implementing dynamic data types in distributed computing networks using an OSF/DCE platform | |
US7178150B1 (en) | Serialization method for transmitting data via CORBA interceptors | |
US6094278A (en) | Method and apparatus for reducing printer memory | |
US6877160B2 (en) | Method, apparatus and program storage device for enabling the reading of data from a named pipe while minimizing the use of system resources | |
US8055083B2 (en) | Portable bitmap rendering systems and methods | |
WO2005038650A1 (en) | A computep, system and methods therefor | |
JP2003157178A (ja) | Xmlデータによる遠隔オブジェクト呼出し方法 | |
CN1225183A (zh) | 交易系统的耦合方法 | |
JPH03152661A (ja) | 文書処理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1049048 Country of ref document: HK |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20040512 Termination date: 20181227 |