通过Java调用OCX控件或者DLL有以下几种方法,使用JNI、JACOB、Jawin等技术完成接口调用;
1.JNI
最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐。
2.Jawin
尝试了一下,效果不错,但相对来说,其编程风格更贴近Windows,离Java有点远
3.Jacob
使用Jacob非常方便,Java编程风格,需要了解的知识比较少。官方的解释是Java COM Bridge,即java和
com组件间的桥梁(进一步了解com/dcom: http://docs.huihoo.com/com/)
com一般表现为dll或exe等二进制文件
下载地址: http://sourceforge.net/projects/jacob-project/ JACOB。e
Jacob的使用方法(64位的jacob组件对应 64为的OCX控件或者DLL文件)
1、将jacob.jar导入到开发项目(开发项目为需要引用的dll接口的项目)中,导入方法如下https://blog.csdn.net/zxz9900/article/details/99598807;
2、将jacob-1.xx-x64.dll放到 C:\Windows\System32文件夹下(注意:该dll必须与jacob.jar版本一致);
3、注册DLL文件,regsvr32 D:\Code\EncryptionLibrary64.dll;
如果注册失败,提示没有入口的错误,请进行如下操作:
开始→所有程序→附件→右键点击命令提示符(CMD)→以管理员身份运行。
在DOS窗口中输入 regsvr32 msi.dll,提示成功,然后再执行 regsvr32 xx.dll
键盘操作win+r弹出运行框,输入 regedit 查看注册表;
注意:如果部分电脑不能注册,或者注册失败,可手动进行如下操作,键盘操作win+r弹出运行框,输入 regedit 查看注册表,选中“计算机”根节点,选中“文件”菜单中的【导入】,导入dll的注册文件(共两个注册文件,ProgId.reg与CLSID.reg),,导入完成后请查询“EncryptionLibrary64.EncryptionLibraryCom”,并修改注册文件中“InprocServer32”与“1.0.0.0”中“CodeBase”参数中“EncryptionLibrary64.dll”的相关路径(修改为dll文件在本地的路径);
1.初始化
ComThread.InitMTA(true);
ActiveXComponent com = new ActiveXComponent("组件的ProgID") ;
Dispatch disp = com.getObject();
2.调用控件里面的方面
2.1调用无参的方法,并返回一个short值
Dispatch.call(disp, "Init").getShort();
2.2调用有一个参数的方法,并返回一个boolean值
Dispatch.call(disp,"Method",new Variant(args)).getBoolean();
调用多个参数依次类推,注意在传递参数前,将Java中的参数转换成Variant。