发现很多人在问java怎么调用大漠插件,自己研究了下,写篇博文分享下,大牛请忽略。
这其实是一个java调用dll的问题,于是去查了下java如何调用dll,最先查到的是通过jni,发现非常麻烦,接着又发现一个jar包jna,实验了下发现不行,dm.dll属于com类型的插件,又查到一个jacob包专门调用com。但是有点不完美的是目前不知道如何免注册调用。欢迎加群探讨更多java相关的技术qq群:522163363
一、环境
dm.dll版本3.1233
系统环境win10
jdk1.8 (win32)
jacob-1.17(包含 jacob.jar、jacob-1.17-x64.dll、jacob-1.17-x86.dll) 下载地址 https://sourceforge.net/projects/jacob-project/files/jacob-project/
开发工具idea
二、版本说明
dm.dll是win32编译的所以这边jdk要用x86的,jacob也要用x86。
首先将下载好的jacob中的jacob-1.17-x86.dll 拷贝到jdk目录 C:\Program Files (x86)\Java\jdk1.8.0_171\jre\bin
接着工程目录引入jacob .jar包这个一定要跟dll配套
接着 将dm.dll注册到系统,环境问题是个坑,因为系统问题,得先把dm.dll拷贝到C:\Windows\SysWOW64目录下,然后右键用管理员模式运行cmd.exe 进入目录C:\Windows\SysWOW64 注册dm.dll ,命令regsvr32 dm.dll 这样才能注册成功。
然后新建个类 DmTest.java
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* Created by admin on 2018/5/31.
*/
public class DmTest {
public static void main(String[] args) {
ActiveXComponent dm = new ActiveXComponent("dm.dmsoft");
System.out.println(dm.invoke("Ver").getString());
Dispatch com = (Dispatch) dm.getObject();
Variant result = Dispatch.call(com, "FindWindow" , "" , "记事本");
System.out.println(result);
}
}
打开一个记事本,右键运行DmTest就可以看到控制台打印输出版本号和记事本句柄