欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

java调用com组件 dll - kev1n z1-1

更新时间: 2015-05-03 00:00:00 责任编辑: Author_N13

 

java调DLL自己曾经也做过,当时是通过JNI调的,极其麻烦需要写C++的中间程序,这次又遇到了类似的问题,需要在java中调用vb.net写的com组件,dll的,而且dll封装的不是方法,而是类定义,需要在调用的时候自己实例化对象。一开始还打算走JNI的老路,但发现JNI只能直接调用DLL中的方法,无法进行对象实例化。后来无意间在sourceforge上看到jacob项目,一试之下果然不凡,不用碰C、C++,直接调用,废话少说,步骤如下:

    从sourceforge上下到jacob的压缩包,其中有两个关键文件,一个是jacob-[版本号].jar,另一个是jacob-[版本号]-[x86/x64].dll,其中x86对应32位操作系统,x64对应64位的,把这个dll放到windows/system32下,jacob.jar导入项目的classpath,把dll用.net framework注册,以我的机器上.net framework安装位置为例,注册命令为:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regsvcs.exe [需要调用的dll文件路径]

注册后就可以在java程序中调了,

ActiveXComponent axc = new ActiveXComponent("ZDSJMSF.SC.ZDSJMSF.SuanFa"); //构造函数参数为Class全名
Dispatch mycom = (Dispatch) axc.getObject(); //相当于对象实例化
Dispatch.put(mycom, "propBuySum","5424"); //为对象的属性赋值
Dispatch.callN(mycom, "Init", new Object[] {});//调用无参数方法Init为方法名
Dispatch.callN(mycom, "GetBuyCode", new Object[] {15,"9"}); //调用带参方法
String propBuyCode = Dispatch.get(mycom, "propBuyCode").getString();//获取对象属性


 

 

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2015-05-03 00:00:00
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/1531672/
本文WWW.DOC100.NET DOC100.NET版权所有。