Java调用dll详细例子

创建Java能调用的dll文件实例
-----------------------------------------------------------
1、编写一个类文件
package com.xinfeng.intf;

public class Animal {

public native int getAge();

public native void setAge(int age);

public native void say();

public native void run();

}

用native关键字修饰将被其它语言实现的方法

2、用javah命令生成.h文件
a、把Animal.java文件编译成class文件
b、set classpath="x:\testInvokeDll\bin",类文件生成在x:\testInvokeDll\bin\com\xinfeng\intf\Animal.class
c、进入x:\testInvokeDll\bin目录
d、javah com.xinfeng.intf.Animal
   你会发现当前目录下多了一个com_xinfeng_intf_Animal.h文件
----------------------------------------------------------------------------
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_xinfeng_intf_Animal */

#ifndef _Included_com_xinfeng_intf_Animal
#define _Included_com_xinfeng_intf_Animal
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     com_xinfeng_intf_Animal
* Method:    getAge
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_xinfeng_intf_Animal_getAge
  (JNIEnv *, jobject);

/*
* Class:     com_xinfeng_intf_Animal
* Method:    setAge
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_xinfeng_intf_Animal_setAge
  (JNIEnv *, jobject, jint);

/*
* Class:     com_xinfeng_intf_Animal
* Method:    say
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_xinfeng_intf_Animal_say
  (JNIEnv *, jobject);

/*
* Class:     com_xinfeng_intf_Animal
* Method:    run
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_xinfeng_intf_Animal_run
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

----------------------------------------------------------------------------

3、生成dll文件,在此以Dev c++ v5.0汉化版为例
a、新建一个dll工程,名叫testdll
b、把里面的两个文件移除
c、右击工程名,添加,选择com_xinfeng_intf_Animal.h确定
d、新建一个单元,假如名称为testdll.cpp,把com_xinfeng_intf_Animal.h声明的方法实现
----------------------------------------------------------------------------
#include <stdio.h>
#include "com_xinfeng_intf_Animal.h"

int age = 0;

JNIEXPORT jint JNICALL Java_com_xinfeng_intf_Animal_getAge
  (JNIEnv *, jobject)
{
          return age;
}
 
JNIEXPORT void JNICALL Java_com_xinfeng_intf_Animal_setAge
  (JNIEnv *, jobject, jint _age)
{
          age = _age;
}

JNIEXPORT void JNICALL Java_com_xinfeng_intf_Animal_say
  (JNIEnv *, jobject)
{
          printf("Hello World!\n");
}

JNIEXPORT void JNICALL Java_com_xinfeng_intf_Animal_run
  (JNIEnv *, jobject)
{
          printf("Running!\n");
}
----------------------------------------------------------------------------
e、点击“运行”->“编译”,这时你会看到很多数据类型没被声明的错误,那是因为
com_xinfeng_intf_Animal.h使用了很多JAVA_HOME/include/jni.h文件自定义的数据类型,而jni.h又引
用了JAVA_HOME/include/win32/jni_md.h,这时你需要把jni.h和jni_md.h引入到工程里面来,左击工程名
“工程属性”->“文件/目录”->“包含文件目录”把JAVA_HOME/include和
JAVA_HOME/include/win32文件夹添加,确定后,再次编译一切正常,这时在工程
的目录下就找到testdll.dll文件,这样dll文件就生成了

4、调用dll文件
a、把testdll.dll文件复制在项目底下
b、新建一个java文件
----------------------------------------------------------------------
package com.xinfeng.main;

import com.xinfeng.intf.Animal;

public class Main {

static{
/*
* 转入dll文件,在此不需要后缀名
* 不同的系统库文件的后缀名是不一样的
* 如windows是dll,而linux是so
* jvm在不同系统会载入相应的库文件
*/
System.loadLibrary("dellTemplete"); //
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal persion = new Animal();
persion.setAge(23);

System.out.println("Age: " + persion.getAge());
persion.say();
persion.run();
}

}
----------------------------------------------------------------------

可能上面有些名词用错了,请多包含!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值