java调用dll文件

在java中调用C/C++写的dll库文件的步聚如下:

 

1. 建立一个java project ,然后新建一个类代码如下:

 

 

package com.lib;

public class TestMylib {
	
	static{
		System.loadLibrary("TestMylib");
	}
	
	public native int add(int a, int b);    
	
	public static void main(String args[]){
		
		int a = 1;        
	    int b = 5;
	    int c = 0;
	    TestMylib test1 = new TestMylib();   
	    c = test1.add(a,b);
	    
	    System.out.println("c = " + c);
		
	}
}

 

2. 然后利用javah 根据上面类的.class 文件生成 *.h 文件,如:javah com.lib.TestMylib   这里的路径一定要是.class文件的路径。

 

3. 在vc++的开发环境中新建一个动态连结库工程,然后把生成的*.h文件添加到工程中,然后把jdk中的 jni.h、 jni_md.h  添加到工程中,然后在工程中实现调用的函数。

 

4. 编译生成dll库文件。

 

5. 然后把生成的dll文件复制到java project的根目录下。

 

6. 运行java项目,得如下结果,表示成功

 

 

c = 6

 

注意:如果在命令行中运行带有包名的文件,我还没有实验成功,总是打不到dll文件,感觉dll的文件的位置放的不正确, 一直没有解决。

 

另外:

   1. 如下出现下列错误,表示dll文件的位置没有放正确。

Exception in thread "main" java.lang.NoClassDefFoundError: com\lib\TestMylib (wrong name: com/lib/TestMylib)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
1)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com\lib\TestMylib.  Program will exit.

 

2. 如果出现下列错误,则是方法名拼写有错误与使用javah生成的 .h 文件中的不一致。

 

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.lib.TestMylib.add(II)I
	at com.lib.TestMylib.add(Native Method)
	at com.lib.TestMylib.main(TestMylib.java:17)
 

注意:现在有一些开源的工具,可以实现此功能,比这个要简单,如jacob, jawin等开源软件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值