日期:2011-03-22 16:16:00 来源:本站整理
用Java筹划COM客户[Java编程]
本文“用Java筹划COM客户[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
目前,让我们转到另一侧,并用Java开辟一个COM客户.这个程序会调用系统已安装的COM服务器内的服务.就目前这个例子来说,我们利用的是在前一个例子里为服务器实现的一个客户.固然代码在Java程序员的眼中看起来对比熟习,但在幕后发生的一切却并不平常.本例利用了用Java写成的一个服务器,但它可利用于系统内安装的任何ActiveX控件、ActiveX Automation服务器大概ActiveX组件——只要我们有一个范例库.
首先,我们将Jactivex工具利用于服务器的范例库.Jactivex有一系列选项和开关可供挑选.但它最基本的情势是读取一个范例库,并生成Java源文件.这个源文件保存于我们的windows/java/trustlib目录中.通过下面这行代码,它利用于为外部COM Automation服务器生成的范例库:
jactivex /javatlb JavaAdder.tlb
Jactivex完成今后,我们再来看看自己的windows/java/trustlib目录.此时可在此中看到一个新的子目录,名为javaadder.这个目录包含了用于新包的源文件.这是在Java里与范例库的功效差不多的一个库.这些文件需求利用Microsoft编译器的专用指导号令:@com.jactivex生成多个文件的缘由是COM利用多个实体来描写一个COM服务器(另一个缘由是我没有对MIDL文件和Java/COM工具的利用举行具体的调整).
名为Adder.java的文件等价于MIDL文件中的一个coclass指导号令:它是对一个COM类的声明.其他文件则是由服务器揭暴露来的COM接口的Java等价物.这些接口(比方Adder_DispatchDefault.java)都属于“遣送”(Dispatch)接口,属于Automation掌握器与Automation服务器之间的沟通机制的一部份.Java/COM集成特点也支持双接口的实现与利用.但是,IDispatch和双接口的问题已超越了本附录的范围.
在下面,大家可看到对应的客户代码.第一行只是导入由jactivex生成的包.然后成立并利用COM Automation服务器的一个实例,就象它是一个原始的Java类那样.请注意行内的范例模子,此中“例示”了COM对象(即生成并调用它的一个实例).这与COM对象模子是一致的.在COM中,程序员永久不会得到对整个对象的一个引用.相反,他们只能拥有对类内实现的一个或多个接口的引用.
“例示”Adder类的一个Java对象今后,就相当于指导COM激活服务器,并成立这个COM对象的一个实例.但我们随后必须指定自己想利用哪个接口,在由服务器实现的接口中挑选一个.这恰是范例模子完成的工作.这儿利用的是“默许遣送”接口,它是Automation掌握器用于同一个Automation服务器通信的尺度接口.欲理解这方面的细节,请参考由Ibid编著的《Inside COM》.请注意激活服务器并挑选一个COM接口是多么简单!
目前,我们可以编译它,并开始运路程序.import javaadder.*; public class JavaClient { public static void main(String [] args) { Adder_DispatchDefault iAdder = (Adder_DispatchDefault) new Adder(); iAdder.setAddend(3); iAdder.sum(); iAdder.sum(); iAdder.sum(); System.out.println(iAdder.getResult()); } }
1. com.ms.com包
com.ms.com包为COM的开辟定义了数目众多的类.它支持GUID的利用——Variant(变体)和SafeArray Automation(安全数组自动)范例——能与ActiveX控件在一个较深的层次打交道,并可掌握COM非常.
由于篇幅有限,这里不大概触及全部这些主题.但我想侧重夸大一下COM非常的问题.按照标准,几近全部COM函数城市返回一个HRESULT值,它奉告我们函数调用能否成功,以及失利的缘由.但假如察看服务器和客户代码中的Java办法签名,就会发现没有HRESULT.相反,我们用函数返回值从一些函数那边取回数据.“虚拟机”(VM)会将Java气势的函数调用转换成COM气势的函数调用,乃至包含返回参数.但假如我们在服务器里调用的一个函数在COM这一级失利,又会在虚拟机里呈现什么事情呢?在这种情形下,JVM会认为HRESULT值标志着一次失利,并会产生类com.ms.com.ComFailException的一个固有Java非常.这样一来,我们便可用Java非常掌握机制来管理COM错误,而不是查抄函数的返回值.
如欲深化理解这个包内包含的类,请参考微软公司的产品文档.
以上是“用Java筹划COM客户[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论