基于构件定义语言自动生成c++程序的方法

文档序号:1584221阅读:328来源:国知局

专利名称::基于构件定义语言自动生成c++程序的方法
技术领域
:本发明涉及一种基于构件定义语言(ComponentDefinitionLanguage,CDL语言)自动生成C++程序的方法,特别是指一种利用编译方法,将基于构件表述的程序代码自动转换为基于C++语言的程序代码框架的方法,属于计算机软件
技术领域

背景技术
:随着网络技术的发展以及因特网(Internet)应用的普及,网络服务(WebService)正在成为新一代Internet应用的重要特点。实现网络服务的关键技术是面向构件、中间件的编程技术,以及一整套的运行环境、开发环境等平台技术。为了解决不同软件开发商提供的构件模块(软件对象)可以相互操作使用,构件之间的连接和调用要通过标准的协议来完成。构件化编程模型强调协议标准,需要提供构件的各个厂商都能遵守的协议体系。就像公制螺丝的标准一样,所有符合标准的螺丝和螺母都可以相互装配。构件化编程模型建立在面向对象技术的基础之上,是完全面向对象的,提供了动态构造部件模块(运行中可以构造部件)的机制。构件在运行时动态装入,并且构件可换。其代表是组件对象模型(TheComponentObjectModel,简称COM)技术规范。基于COM的构件化编程技术是大型软件工程化开发的重要手段。美国微软公司基于Windows2000操作系统的软件全部是遵循COM技术规范实现的。此外,由于因特网的普及,构件可来自于网络;操作系统要解决自动下载,安全等问题。因此,操作系统中需要根据构件的自描述信息自动生成构件的运行环境,生成代理构件,即中间件。通过操作系统自动生成的中间件对构件的运行状态进行干预或控制,或自动提供针对不同网络协议、输入输出设备的服务(即运行环境)。中间件编程更加强调构件的自描述和构件运行环境的透明性,是网络时代编程的重要技术。为了在资源有限的嵌入式系统中实现面向中间件编程技术,同时又能得到较高的运行效率,使用基于中间代码-虚拟机的机制显然是不合适的,因为虚拟机机制中对于中间代码的翻译和编译过程恰恰是影响效率的。而采用C++编程实现构件技术,并直接生成运行于构件运行平台的二进制代码,使得更多的程序员能够充分运用自己熟悉的编程语言知识和开发经验,掌握面向构件、中间件编程的技术是解决上述问题的重要手段。但是COM技术规范的构件描述体系十分繁琐,不容易为编程技术人员掌握。
发明内容本发明的主要目的在于提供一种基于构件定义语言自动生成C++程序的方法,可将根据基于构件定义语言编写的程序代码通过编译方法自动转换为基于C++语言的程序代码框架,为编程技术人员提供一种易于掌握的基于构件的程序开发手段和方法。本发明的目的是这样实现的一种基于构件定义语言自动生成C++程序的方法,包括步骤1根据构件定义语言编写构件程序代码,并将该程序存储为构件定义语言文件;步骤2对该构件定义语言文件进行编译,将该构件定义语言文件转换为基于C++程序语言的程序框架,用于程序开发人员在该程序框架下添加相应的程序代码。上述的构件定义语言遵循如下的文法规则构件定义语言文件至少记录被描述对象的属性信息和定义信息,属性信息用于修饰构件、类、类别或接口,属性信息记录在相应主题的定义信息之前。上述的属性信息记录在方括号之中,该属性信息至少包括属性标识和属性内容。属性标识至少包括全球唯一标识符,用于标识构件、类、类别或接口的全球唯一标识信息;版本号,用于标识构件或类的版本;最后日期,用于标识构件或类的最后修改日期;最后时间,用于标识构件或类的最后修改时间;互联网地址,用于标识构件在互联网上的地址;可执行标识,用于标识可执行构件;设备驱动标识,用于标识可支持构件化设备驱动程序的类;入口标识,用于标识为执行程序入口的类或类别;网页标识,用于标识该类生成的构件对象可在网页上查看;读写锁标识,用于标识该类生成的构件对象可以使用读写锁机制;同步锁标识,用于标识该类生成的构件对象可以使用同步锁机制;信号标识,用于标识该类生成的构件对象可以使用信号机制;非远程调用标识,用于标识接口只能在与客户程序相同的域内使用,不能用于远程调用;参数标识,用于标识参数的类型;假类型定义标识,用于标识所标识的类型定义为一个假的类型定义。上述的可执行构件可进入图形模式,且系统提供一个客户程序可以在其上添加控件的主窗口或一个进行绘图操作的图形对象。上述的可执行构件可进入控制台模式。上述的参数为输入参数或输出参数或其值可用做函数的返回值。上述的属性信息为一个或一个以上,且当被修饰对象的属性信息为一个以上时,该属性信息之间设有分隔符。所述的定义信息记录在花括号之中,至少包括关键字和定义内容。所述的关键字至少包括用于定义构件的表示符、用于定义接口的表示符、定义事件接口的表示符、定义类的表示符、定义类别的表示符、定义结构体的表示符、定义枚举类型的表示符、定义类型的表示符、指定本构件中用到其他构件的表示符、禁止或允许显示编译器给出警告信息的表示符。所述的编译具体为首先,文件编译器将构件定义语言文件采用递归下降算法,将其编译为以二进制符号表示的文件;然后,再将该以二进制符号表示的文件中记载的构件的类及接口的定义信息转化为C++语法表示形式,生成构件的C++语言源程序框架。上述的基于C++程序语言的程序框架至少包括C++语言的程序代码文件、C++语言的程序头文件和C++语言的程序资源文件。本发明通过一种构件定义语言解决了采用COM技术规范的构件描述体系的繁琐问题,编程技术人员易于掌握和使用基于构件的编程技术,使得可以采用C++编程实现构件技术,并直接生成运行于构件运行平台的二进制代码;同时,本发明可以根据构件定义语言自动生成C++程序代码框架,为编程技术人员提供了更为方便的基于构件的程序开发手段。具体实施例方式以下结合具体的实施例对本发明作进一步的详细说明本发明首先根据构件定义语言编写构件程序代码,并将该程序存储为构件定义语言文件;然后,对该构件定义语言文件进行编译,将该构件定义语言文件转换为基于C++程序语言的程序框架,用于程序开发人员在该程序框架下添加相应的程序代码。在本实施例中,所述的构件定义语言(ComponentDefinitionLanguage,简称CDL)文件用于定义构件中的类、接口以及接口方法等信息。每个构件都可以由一个或多个类组成,每个类可以提供一个或多个接口,每个接口中可以定义一个或多个方法。在CDL文件中,对构件、接口、类、类别等的描述都分为两个部分属性信息和定义信息。CDL属性信息位于方括号“[]”中,多个属性之间以逗号“,”作为分隔符;对构件、接口、类、类别等的定义信息位于花括号“{}”中。属性信息总是出现在相应主题的定义信息之前。上述的属性信息至少包括属性标识和属性内容。本实施例中的属性标识参见表1表1当被修饰对象的属性信息为一个以上时,该属性信息之间设有分隔符,在本实施例中,属性信息用“,”分隔。例如[uuid(994381D4-397D-410F-A106-56DED7359FC2),scriptable]本实施例中的定义信息记录在花括号之中,至少包括关键字和定义内容。具体的关键字如表2所示表2所述的编译具体为首先,使用CDL文件编译器采用递归下降算法将构件定义语言文件编译为“.cls”文件,该“.cls”文件是CDL文件的二进制符号化表示文件,也称为类信息(ClassInfo)文件;“.cls”文件是对CDL文件的编译结果(就象“.obj”文件是C或C++源程序的编译结果文件一样)。然后,再将该以二进制符号表示的“.cls”文件中记载的构件的类及接口的定义信息转化为C++语法表示形式,生成构件的C++语言源程序框架。该基于C++程序语言的程序框架中包括C++语言的程序代码文件(*.cpp)、C++语言的程序头文件(*.h)和C++语言的程序资源文件(*.src)。一个具体CDL文件的示例假设构件HelloDemo中定义了三个类CHello1、CHello2和CHello3。其中,类CHello2提供了接口IHello,类CHello3提供了接口IHei,而类CHello1同时提供了接口IHello和IHei。这些信息都定义在名为“HelloDemo.cdl”文件中。HelloDemo.cdl文件<prelisting-type="program-listing">[uuid(1845B8D5-15A0-4EFB-AFB7-2A261A0EF408),urn(http:∥www.koretide.com/ezcom/HelloDemo.dll)]componentHelloDemo//构件HelloDemo{∥接口IHello[uuid(B5613847-0A96-4F16-A63F-0BC00358607E)]interfaceIHello{HRESULTHello([in]inti);}∥接口IHei[uuid(07280692-2E77-4562-A9D9-8813ECE351AF)]interfaceIHei{HRESULTHei([in]inti,[out,retval]char*pChar);}∥类CHello1[uuid(994381D4-397D-410F-A106-56DED7359FC2),scriptable]classCHellol{interfaceIHello;interfaceIHei;}∥类CHello2[uuid(C71ACA6F-ECCA-4537-832D-89033590B02C)]classCHello2{&lt;!--SIPO&lt;DPn="7"&gt;--&gt;&lt;dpn="d7"/&gt;interfaceIHello;}//类CHello3[uuid(8C4F6ED3-C3A2-482C-9211-3E315500978F)]classCHello3{interfaceIHei;}}</pre>说明上述的双斜杠“//”作为语句注释符。其中,构件HelloDemo的属性表示为[uuid(1845B8D5-15A0-4EFB-AFB7-2A261A0EF408),urn(http://www.koretide.com/ezcom/HelloDemo.dll)]构件属性对构件起修饰作用,上述的“uuid”属性和“urn”属性是必须的。构件属性中的“uuid”称为构件标识“ID”,它用于唯一标识一个构件;“urn”指定构件所存在的动态连接库(d11)文件在Internet上的位置。构件HelloDemo的定义表示为componentHelloDemo{......}接口属性对接口起修饰作用,其中的“uuid”属性是必须的。接口属性中的“uuid”称为接口标识“ID”(IID),它用于唯一标识一个接口。接口IHello的属性表示为接口定义主要包括接口方法的声明。在CDL文件中最重要的当属接口的定义。因为在构件中,能够与外界打交道的只有接口。一个没有接口方法的接口在现实中没有意义。接口IHello的定义表示为interfaceIHello{HRESULTHello([in]inti);}接口中的方法定义必须遵守如下规定1.接口方法必须使用“HRESULT”作为返回值;2.接口方法参数必须显式指明接口方法的参数是输入参数(in)或输出参数(out)或作为返回值使用(retval),类属性对类起修饰作用,其中的“uuid”属性是必须的。类属性中的“uuid”称为类标识(CLSID),用来唯一标识一个类。属性scriptable的含义表示此构件可以用在网页上。类CHello2的属性表示为[uuid(C71ACA6F-ECCA-4537-832D-89033590B02C)]类定义中主要包括接口的声明,表示该类对象提供的接口。因为对于类对象来说,接口是它与外界进行交互的唯一途径,所以一个没有接口的类的存在,是没有意义的。类CHello2的定义表示为classCHello2{interfaceIHello;}最后应说明的是以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。权利要求1.一种基于构件定义语言自动生成C++程序的方法,其特征在于步骤1根据构件定义语言编写构件程序代码,并将该程序存储为构件定义语言文件;步骤2对该构件定义语言文件进行编译,将该构件定义语言文件转换为基于C++程序语言的程序框架,用于程序开发人员在该程序框架下添加相应的程序代码。2.根据权利要求1所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的构件定义语言遵循如下的文法规则构件定义语言文件至少记录被描述对象的属性信息和定义信息,属性信息用于修饰构件、类、类别或接口,属性信息记录在相应主题的定义信息之前。3.根据权利要求2所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的属性信息记录在方括号之中,该属性信息至少包括属性标识和属性内容。4.根据权利要求3所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的属性标识至少包括全球唯一标识符,用于标识构件、类、类别或接口的全球唯一标识信息;版本号,用于标识构件或类的版本;最后日期,用于标识构件或类的最后修改日期;最后时间,用于标识构件或类的最后修改时间;互联网地址,用于标识构件在互联网上的地址;可执行标识,用于标识可执行构件;设备驱动标识,用于标识可支持构件化设备驱动程序的类;入口标识,用于标识为执行程序入口的类或类别;网页标识,用于标识该类生成的构件对象可在网页上查看;读写锁标识,用于标识该类生成的构件对象可以使用读写锁机制;同步锁标识,用于标识该类生成的构件对象可以使用同步锁机制;信号标识,用于标识该类生成的构件对象可以使用信号机制;非远程调用标识,用于标识接口只能在与客户程序相同的域内使用,不能用于远程调用;参数标识,用于标识参数的类型;假类型定义标识,用于标识所标识的类型定义为一个假的类型定义。5.根据权利要求4所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的可执行构件可进入图形模式,且系统提供一个客户程序可以在其上添加控件的主窗口或一个进行绘图操作的图形对象。6.根据权利要求4所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的可执行构件可进入控制台模式。7.根据权利要求4所述的基于构件定义语言自动生成C++程序的方法,其特征在于参数为输入参数或输出参数或其值可用做函数的返回值。8.根据权利要求2或3或4或5或6或7所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的属性信息为一个或一个以上,且当被修饰对象的属性信息为一个以上时,该属性信息之间设有分隔符。9.根据权利要求2所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的定义信息记录在花括号之中,至少包括关键字和定义内容。10.根据权利要求9所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的关键字至少包括用于定义构件的表示符、用于定义接口的表示符、定义事件接口的表示符、定义类的表示符、定义类别的表示符、定义结构体的表示符、定义枚举类型的表示符、定义类型的表示符、指定本构件中用到其他构件的表示符、禁止或允许显示编译器给出警告信息的表示符。11.根据权利要求1所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的编译具体为首先,文件编译器将构件定义语言文件采用递归下降算法,将其编译为以二进制符号表示的文件;然后,再将该以二进制符号表示的文件中记载的构件的类及接口的定义信息转化为C++语法表示形式,生成构件的C++语言源程序框架。12.根据权利要求1或11所述的基于构件定义语言自动生成C++程序的方法,其特征在于所述的基于C++程序语言的程序框架至少包括C++语言的程序代码文件、C++语言的程序头文件和C++语言的程序资源文件。全文摘要一种基于构件定义语言自动生成C++程序的方法,根据构件定义语言编写构件程序代码,并将该程序存储为构件定义语言文件;对该构件定义语言文件进行编译,将该构件定义语言文件转换为基于C++程序语言的程序框架,用于程序开发人员在该程序框架下添加相应的程序代码。本发明通过一种构件定义语言解决了采用COM技术规范的构件描述体系的繁琐问题,编程技术人员易于掌握和使用基于构件的编程技术,使得可以采用C++编程实现构件技术,并直接生成运行于构件运行平台的二进制代码;同时,本发明可以根据构件定义语言自动生成C++程序代码框架,为编程技术人员提供了更为方便的基于构件的程序开发手段。文档编号G06F9/45GK1519716SQ0310082公开日2004年8月11日申请日期2003年1月22日优先权日2003年1月22日发明者陈榕,苏翼鹏,梁宇洲,榕陈申请人:北京科泰世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1