网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > Java精品代码 > 正文

使用非JAVA代码

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
标识符。另外,我们的应用程序需要对服务器展示出来的服务进行的一个描述。下面这两个小节将分别讨论这两个问题。

  1. GUID和注册表

  COM采用结构化的整数值(长度为128位)唯一性地标识系统中注册的COM项目。这些数字的正式名称叫作GUID(Globally Unique IDentifier,全局唯一标识符),可由特殊的工具生成。此外,这些数字可以保证在“任何空间和时间”里独一无二,没有重复。在空间,是由于数字生成器会读取网卡的ID号码;在时间,是由于同时会用到系统的日期和时间。可用GUID标识COM类(此时叫作CLSID)或者COM接口(IID)。尽管名字不同,但基本概念与二进制结构都是相同的。GUID亦可在其他环境中使用,这里不再赘述。

  GUID以及相关的信息都保存在Windows注册表中,或者说保存在“注册数据库”(Registration Database)中。这是一种分级式的数据库,内建于操作系统中,容纳了与系统软硬件配置有关的大量信息。对于COM,注册表会跟踪系统内安装的组件,比如它们的CLSID、实现它们的可执行文件的名字及位置以及其他大量细节。其中一个比较重要的细节是组件的ProgID;ProgID在概念上类似于GUID,因为它们都标识着一个COM组件。区别在于GUID是一个二进制的、通过算法生成的值。而ProgID则是由程序员定义的字串值。ProgID是随同一个CLSID分配的。

  我们说一个COM组件已在系统内注册,最起码的一个条件就是它的CLSID和它的执行文件已存在于注册表中(ProgID通常也已就位)。在后面的例子里,我们主要任务就是注册与使用COM组件。

  注册表的一项重要特点就是它作为客户和服务器对象之间的一个去耦层使用。利用注册表内保存的一些信息,客户会激活服务器;其中一项信息是服务器执行模块的物理位置。若这个位置发生了变动,注册表内的信息就会相应地更新。但这个更新过程对于客户来说是“透明”或者看不见的。后者只需直接使用ProgID或CLSID即可。换句话说,注册表使服务器代码的位置透明成为了可能。随着DCOM(分布式COM)的引入,在本地机器上运行的一个服务器甚至可移到网络中的一台远程机器,整个过程甚至不会引起客户对它的丝毫注意(大多数情况下如此)。

  2. 类型库

  由于COM具有动态链接的能力,同时由于客户和服务器代码可以分开独立发展,所以客户随时都要动态侦测由服务器展示出来的服务。这些服务是用“类型库”(Type Library)中一种二进制的、与语言无关的形式描述的(就象接口和方法签名)。它既可以是一个独立的文件(通常采用.TLB扩展名),也可以是链接到执行程序内部的一种Win32资源。运行期间,客户会利用类型库的信息调用服务器中的函数。

  我们可以写一个Microsoft Interface Definition Language(微软接口定义语言,MIDL)源文件,用MIDL编译器编译它,从而生成一个.TLB文件。MIDL语言的作用是对COM类、接口以及方法进行描述。它在名称、语法以及用途上都类似OMB/CORBA IDL。然而,Java程序员不必使用MIDL。后面还会讲到另一种不同的Microsoft工具,它能读入Java类文件,并能生成一个类型库。

  3. COM:HRESULT中的函数返回代码

  由服务器展示出来的COM函数会返回一个值,采用预先定义好的HRESULT类型。HRESULT代表一个包含了三个字段的整数。这样便可使用多个失败和成功代码,同时还可以使用其他信息。由于COM函数返回的是一个HRESULT,所以不能用返回值从函数调用里取回原始数据。若必须返回数据,可传递指向一个内存区域的指针,函数将在那个区域里填充数据。我们把这称为“外部参数”。作为Java/COM程序员,我们不必过于关注这个问题,因为虚拟机会帮助我们自动照管一切。这个问题将在后续的小节里讲述。

  A.5.2 MS Java/COM集成

  同C++/COM程序员相比,Microsoft Java编译器、虚拟机以及各式各样的工具极大简化了Java/COM程序员的工作。编译器有特殊的引导命令和包,可将Java类当作COM类对待。但在大多数情况下,我们只需依赖Microsoft JVM为COM提供的支持,同时利用两个有力的外部工具。

  Microsoft Java Virtual Machine(JVM)在COM和Java对象之间扮演了一座桥梁的角色。若将Java对象创建成一个COM服务器,那么我们的对象仍然会在JVM内部运行。Microsoft JVM是作为一个DLL实现的,它向操作系统展示出了COM接口。在内部,JVM将对这些COM接口的函数调用映射成Java对象中的方法调用。当然,JVM必须知道哪个Java类文件对应于服务器执行模块;之所以能够找出这方面的信息,是由于我们事前已用Javareg在Windows注册表内注册了类文件。Javareg是与Microsoft Java SDK配套提供的一个工具程序,能读入一个Java类文件,生成相应的类型库以及一个GUID,并可将类注册到系统内。亦可用Javareg注册远程服务器。例如,可用它注册在不同机器上运行的一个服务器。

  如果想写一个Java/COM客户,必须经历一系列不同的步骤。Java/COM“客户”是一些特殊的Java代码,

  • 下一篇资讯: java小游戏源代码
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师