JACOB 就是 JAVA-COM Bridge的缩写,提供自动访问com的功能,也是通过JNI功能访问Windows平台下的com组件或者win32系统库。
配置:
1,下载jacob,网址http://danadler.com/jacob/,有X86版本与X64版本,确定好版本。JDK版本,操作系统与jacob的版本要相同。
2,安装jacob,很简单
解压以后,把jacob.dll文件放到system32下面,或者放到jdk/bin下面,也可以放在jre/bin下面
jacob.jar放到环境变量里面,我使用的myeclipse配置的J2EE项目,直接放到了/web-inf/lib里面。
3,注册调用的DLL文件
regsvr32 ***.dll 对DLL文件使用绝对路径,如果放在system32下面,可以不用写路径。注册成功以后会有提示框提示
取消注册使用命令 regsvr32 -u ***.dll
4,编写java代码
调用的是一个没有参数的DLL方法,方法内部为:
Public Function testNoArgs() As Variant
testNoArgs = "abcdddd"
End Function
java代码为:
public static void first(){
ActiveXComponent sap = new ActiveXComponent("First.hw");
Dispatch myCom = sap.getObject();
System.out.println(Dispatch.call(myCom,"testNoArgs"));
}
调用这个方法,输出"
abcdddd",成功。
5,如果提示错误为: “Exception in thread "main" com.jacob.com.ComFailException: Can't get object clsid from progid”,表示没有找到clsid,clsid是注册DLL文件是生成的一个编码,一般为Dll的工程名+“."+类名
解决方法:通过注册表寻找DLL的CLSID
打开注册表,使用命令regedit
查找注册的DLL的文件名,在HKEY_CLASSES_ROOT里面寻找,找到CLSID
6,如果提示错误为“ Description: 8002000f / 非选择性的参数。”,表示传递的参数存在问题。
7,编写DLL文件时,注意给工程重新命名,类重新命名,否则会出现CLSID为“工程1.class1"的情况。
8,如果错误提示“文件未找到”,检查DLL内是否调用了其它的DLL,或者调用的文件是否都已经存放到相应的位置。