本发明专利技术涉及一种命名服务机制,包括以下步骤:步骤1:服务端进程获得一个组件对象指针;步骤2:服务端进程将获得的组件对象指针与一个字符串绑定,并注册到内核,获得组件对象在内核的注册信息对象,内核创建一个代表命名服务的命名服务对象,并将命名服务对象以所述字符串为标志与注册信息对象绑定;步骤3:客户端进程利用所述字符串查询获得所述命名服务对象;步骤4:客户端进程找到绑定的所述字符串对应的注册信息对象;步骤5:客户端进程通过所述注册信息对象和字符串找到组件对象的指针。因此本发明专利技术可以支持远程接口代理,实现字符串与对象的绑定,且允许将任意接口代理与字符串绑定。
【技术实现步骤摘要】
本专利技术涉及一种命名服务机制,尤其是一种通过字符串与命名服务对象的对应关系来找到组件对象的命名服务机制。
技术介绍
零部件动态装配(Component Assembly Runtime,简称CAR),是一种构件技术。CAR构件技术是面向构件编程的编程模型,它规定了一组构件间相互调用的标准,使得二进制构件能够自描述,能够在运行时动态链接。CAR与微软的组合对象模型(Component Object Model,简称COM)类似,但是和微软COM相比,CAR删除了COM中过时的约定,禁止用户定义COM的非自描述接口;完备了构件及其接口的自描述功能,实现了对COM的扩展;对COM的用户界面进行了简化包装,易学易用。从上面的定义中,我们可以说CAR是微软COM的一个子集,同时又对微软的COM进行了扩展,在软件开发工具包(Software Development Kits,简称SDK)的支持下,使得高深难懂的构件编程技术很容易被C/C++程序员理解并掌握。命名服务是CAR体系里面的一项重要技术,CAR体系的组件实现了较为完善的自描叙功能,其有一套成熟的可以穿透不同机器,进程以及其它不同访问限制空间的组件交互技术。命名服务在该体系中担当了一种发布,发现并获得组件服务的策略机制。现有的命名机制类同于微软COM的名字对象机制COM的名字对象机制,是一种标准的,可以把任意的对象名字解析到这些名字所引用的对象上的方式。其支持三种激活方式绑定到类对象,绑定到新的类实例,以及绑定到保存在文件中的永久对象。下面介绍相应的各个过程的C++代码实现1、绑定到类对象//本例通过获得一个大猩猩的类对象,然后通过其创建一个类实例IclassFactory*pcf=0;//声明Gorilla的CLSID为显示名const OLECHAR pwsz[]= OLESTR(″clsid571F1680-CC93-1100-2000-001223113344″);//通过Gorilla的类名字对象寻找类对象HRESULT hr=CoGetObject(pwsz,0,IID_IclassFactory, (void**)&pcf);if(SUCCEEDED(hr)){IApe*pApe=0;//使用类对象创建Gorillahr=pcf-> CreateInstance(0,IID_IApe,(void**)&pApe);...... }2、绑定到类实例//本例通过获得一个命名的类实例IApe*rpApe;HRESULT hr;//类对象名(clsid)和类实例名(Ursus)的组合const OLECHAR pwsz= OLESTR(″ server public cornelius.chmp″);hr=CoGetObject(pwszObject,0, IID_IApe,(void**)&rpApe); 因此,从上可以看出,微软的名字对象对外提供了统一的接口函数获得对象函数(CoGetObject)。但从CoGetObject的实现来看,它将创建对象本身与绑定名字两个过程合在一起,也就是说当不存在字符串所指定的对象或者实例的时候,它将创建一个对应的新的对象或者实例来满足用户的要求。用户也无法自己指定特定的类实例进行绑定。而对于绑定类对象来说,COM规定组件的类对象必须实现解析显示命名(IparseDisplayName)接口才能使用名字对象绑定类对象的功能;对于绑定到保存在文件中的永久对象,则组件本身必须实现永久文件(IPersistFile)接口,名字对象机制的使用对组件本身的实现有限制和需求。它也不支持将一个远程接口代理和字符串绑定的功能。
技术实现思路
本专利技术的目的是提供一种命名服务机制,支持远程接口代理,可以实现字符串与对象的绑定,而且允许将任意接口代理与字符串绑定,从而达到组件服务与提供命名服务可以不为同一用户的能力,更有利于组件服务的分发和使用。为实现上述目的,本专利技术提供了一种命名服务机制,包括以下步骤步骤1、服务端进程获得一个组件对象的指针;步骤2、服务端进程将获得的组件对象的指针与一个字符串绑定,并注册到内核,获得组件对象在内核的注册信息对象,内核创建一个代表命名服务的命名服务对象,并将命名服务对象以所述字符串为标志与注册信息对象绑定;步骤3、客户端进程利用所述字符串查询获得所述命名服务对象;步骤4、客户端进程找到绑定的所述字符串对应的注册信息对象;步骤5、客户端进程通过所述注册信息对象和字符串找到组件对象的指针。在所述步骤5之后还包括步骤6、客户端进程利用所获得的组件对象的接口指针调用组件方法;步骤7、客户端进程释放所述组件对象接口指针,通知服务端进程。所述步骤7之后还具有以下步骤步骤8、服务端进程注销所述命名服务对象;步骤9、服务端进程释放所述组件对象的接口指针。因此,本专利技术命名服务机制,可以支持远程接口代理,可以实现字符串与对象的绑定,而且允许将任意接口代理与字符串绑定,从而达到了组件服务与提供命名服务可以不为同一用户的能力,更有利于组件服务的分发和使用。即通过用字符串的方式向外发布组件,而异空间的其它用户则可以通过命名服务获取组件服务。用户和内核都可以创建一个命名服务,其它用户可以透明的获得该用户指针,而无需考虑其所在位置空间的不同。命名服务server端获得的组件指针代表的可以是其server进程内空间创建并运行的组件,亦可以是一种基于CAR构件技术的嵌入式操作系统内核提供的以接口形式提供的内核功能,也可以是server端所获得的其它进程所实现的组件服务。相关组件服务动态更新或者升级,不影响其它通过命名服务获取该服务的程序,其依然可以无需改动,无需重新编译地正常工作。下面结合附图和实施例,对本专利技术的技术方案做进一步的详细描述。附图说明图1为本专利技术命名服务机制的方法流程图。图2为本专利技术命名服务机制EzFindService API函数的实现流程图。具体实施例方式本专利技术的思想是设计一种以字符串为标识的服务。服务程序可以通过操作系统API函数注册服务函数(EzRegisterService)向操作系统注册自己的服务接口,而服务的使用者(即客户端程序)则可以通过API函数获取服务函数(EzFindService)来获取指定的服务接口。命名服务通过简单,友好的系统API函数,为系统服务以及用户组件提供了一套完整的CAR构件使用流程,具有良好的扩展性,并支持基于组件的动态更新和升级。命名服务机制属于CAR构件技术的一部分,CAR构件技术通过命名服务机制提供一种发布,获取,使用CAR构件的方法,命名服务隶属于CAR构件技术的用户接口部分。首先,我们实现一个简单的动态链接文件(Dynamic Link Library,简称dll)形式的CAR组件服务,主要C++代码如下在hello.car文件中组件,实现类、接口,以及方法的声明表示如下component Hello//组件Hello{interface IHello{//接口IHelloHRESULT Hello(EzStr inStr);//方法Hello}class CHello{//实现类CHelloi本文档来自技高网...
【技术保护点】
一种命名服务机制,其特征在于包括以下步骤:步骤1、服务端进程获得一个组件对象的指针;步骤2、服务端进程将获得的组件对象的指针与一个字符串绑定,并注册到内核,获得组件对象在内核的注册信息对象,内核创建一个代表命名服务的命名服务 对象,并将命名服务对象以所述字符串为标志与注册信息对象绑定;步骤3、客户端进程利用所述字符串查询获得所述命名服务对象;步骤4、客户端进程找到绑定的所述字符串对应的注册信息对象;步骤5、客户端进程通过所述注册信息对象和 字符串找到组件对象的指针。
【技术特征摘要】
【专利技术属性】
技术研发人员:苏翼鹏,刘亚东,梁宇洲,陈榕,王晨辉,
申请(专利权)人:上海科泰世纪科技有限公司,
类型:发明
国别省市:31[中国|上海]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。