Java调用dll Java调用COM组件

本文详细介绍了如何使用Java调用DLL文件,包括借助JNative库进行调用,并提供了一个TestABC.dll的调用示例。此外,还阐述了通过Jacob库调用已注册为COM组件的DLL,包括DLL的注册步骤和Java代码调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、JNative

JNative调用dll很方便,只是需要dll有导出函数,否则调不到。就是说要调用的方法必须是导出函数。如果不知道你的dll有没有这个导出函数,可下载这个软件查看——DLL函数查看器

下载JNative开源项目(百度之),解压开,拿到三个文件,分别是:JNativeCpp.dlllibJNativeCpp.soJNative.jar  
——JNativeCpp.dll Windows下用的,拷贝到c:/windows / system32目录下

如果不行,可能是64b系统,在c:/windows /SysWOW64文件夹下面再放一个

——libJNativeCpp.so Linux下的,拷贝到系统目录下;

——JNative.jar 这是一个扩展包,导入工程LIB中或将其拷贝到jdk\jre\lib\ext 下,系统会自动加载。

例子:使用JNative组件调用一个测试应用服务器状态的TestABC.dll文件,Dll文件中包含一个TestMain(String ip,int port)方法,返回一个整形的结果(1或0)

public static void main(String[] args) {
		System.loadLibrary("TestABC");
		JNative n = null;
		try {
			n = new JNative("TestABC", "TestMain");
			// n.setRetVal(Type.STRING);
			int i = 0;
			n.setParameter(i++, Type.STRING, "192.168.1.108");
			n.setParameter(i++, Type.INT, "" + 1000);
			n.invoke();
			return Integer.parseInt(n.getRetVal());
		} catch (NativeException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}


2、Jacob

Jacob调用COM组件,如果dll文件可以注册为COM组件,可以使用Jacob方式调用,很好用,而且不需要导出函数。

Jacob下载:点击打开链接

例子:

第一步,注册组件,注册方式为 开始——运行——输入命令cmd——输入命令regsvr32——空格——拖入要注册的dll文件——回车

显示成功,则注册完成。

第二步,去注册表中把你注册com组件找到,一般命名方式是“dll名字+ . +后缀”,可以根据dll的名字找,这是获取此com组件的关键,同时进一步判断你注册成功了。

第三步,写代码调用

ActiveXComponent axc = new ActiveXComponent("testcom.Test");//获取对象
Dispatch dis = axc.getObject();

String str ="";//初始化
Variant v1 = new Variant(str,true);//输出参数定义,必须这样,否则得不到输出参数的值

Variant v2=new Variant();//返回值定义
v2 = Dispatch.call(dis, "getFace", "100",200,v1);

System.out.println("输出参数值:"+v1);
System.out.println("返回值:"+v2);
代码解释:调用方法时,注意此处有Java中没有的概念,叫做输出参数,用于返回值不够时的传值。输出参数的定义如上,一般参数定义与Java相同,直接传输即可。

忘了说最初,需要把jacob解压开,获取里面的dll文件,放到c:/windows / system32目录,建议64b的系统再放一份到c:/windows /SysWOW64文件夹下。里面的jacob.jar就不用多说了吧,放到项目里导入就行啦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值