Java下(Eclipse中)调用DLL动态链接库的方法

Java下(Eclipse中)调用DLL动态链接库的方法
2011-03-09 21:26


今天试了试JNI,有了点心得体会,记下来,以备后用,也给大家一起分享分享!

使用到的工具包括:Eclipse、VC6.0、cmd、notepad

Java使用JNI调用C/C++的DLL动态链接库,例如,我们有Animal类
********************************************************
package com;
public class Animal
{
public native int getAge();
public native void setAge(int age);
public native void say();
public native void run();
}
********************************************************
Animal.java文件位于F:\JWorkspace\Test

1、用javah命令生成.h文件
a、使用javac命令把Animal.java编译生成Animal.class文件
b、cmd进入到F:\JWorkspace\Test
c、在当前目录下手动建立文件夹com,并将Animal.class文件移动到com目录下
d、命令:javah -classpath "F:\JWorkspace\Test" com.Animal 成功则生成com_Animal.h文件
注意命令中的com.Animal的写法,带上包名com,.后面跟类名即可

2、生成dll文件,采用VC6.0
a、使用VC新建一个DLL工程,命名TestDLL
b、将jni.h和jni_md.h文件复制到VC安装目录的include文件下,方便以后的JNI使用。这里的jni.h文件位于Java安装目录下的Java\jdk1.5.0_10\include,jni_md.h文件位于Java\jdk1.5.0_10\include\win32下,因为jni.h文件引用了jni_md.h文件,所以
必须将这两个文件置于你的VC工程下;或者直接放到VC安装目录的include目录下,方便以后使用。
c、新建一个CPP文件,将第一步生成的头文件com_Animal.h包含进来,接下来编写如下代码:
********************************************************
#include <stdio.h>
#include "com_Animal.h"
int age = 0;
JNIEXPORT jint JNICALL Java_com_Animal_getAge
(JNIEnv *, jobject)
{
 return age;
}
JNIEXPORT void JNICALL Java_com_Animal_setAge
(JNIEnv *, jobject, jint _age)
{
 age = _age;
}
JNIEXPORT void JNICALL Java_com_Animal_say
(JNIEnv *, jobject)
{
 printf("Hello World!\n");
}
JNIEXPORT void JNICALL Java_com_Animal_run
(JNIEnv *, jobject)
{
 printf("Running!\n");
}
********************************************************
d、编译并生成dll:TestDLL

3、使用Eclipse调用生成的DLL库文件
a、使用Eclipse建立Java Application工程,创建package,将之前的Animal类放到工程源文件的com目录下
b、创建一个新的java class文件,命名test.java,代码如下:
********************************************************
package com;
import com.Animal;
public class test
{
 static
 {
  System.loadLibrary("TestDLL");
 }
 public static void main(String[] args)
 {
  Animal persion = new Animal();
  persion.setAge(23);
  System.out.println("Age: " + persion.getAge());
  persion.say();
  persion.run();
 }
}
********************************************************
c、将之前编译好的dll放置到工程的根目录下,若不行可放置到java安装路径下如:\Java\jdk1.5.0_10\bin 或者\Java\jre1.5.0_10\bin
若还是不行,则将该dll直接放置到windows系统的system32目录下(注意,一定要保证dll与Animal的一致性)

NOTE:
1:java中的dll分为两类,一类是java直接使用;一类是dll本身还要依赖别的dll

2:使用LoadLibrary()方式加载dll,需给出绝对路径名,使用Load方式加载dll,只需要给出dll的名字既可,不带.dll

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值