Java调用dll详细例子
来源:互联网 发布:网络验证系统破解版 编辑:程序博客网 时间:2024/05/20 07:36
创建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();
}
}
----------------------------------------------------------------------
可能上面有些名词用错了,请多包含!
-----------------------------------------------------------
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();
}
}
----------------------------------------------------------------------
可能上面有些名词用错了,请多包含!
- Java调用dll详细例子
- java调用dll例子
- *JAVA调用DLL简单小例子*
- JAVA调用DLL简单小例子
- Java调用dll例子,JNative的使用
- Java调用Dll 例子(一)
- JAVA调用C++ dll C++调用JAVA的例子
- 调用DLL函数例子
- python调用dll例子
- JNA:JAVA调用DLL 超详细代码实战
- JNA:JAVA调用DLL 超详细代码实战
- java中通过ndk调用c/c++ 例子,详细解释
- ORACLE调用DLL的例子
- C#调用C++DLL例子
- delphi 动态调用dll例子
- 使用dll以及调用dll例子
- DLL入门:C#调用C++ DLL例子
- java调用dll
- hdu 4293 Groups (2012 ACM/ICPC Asia Regional Chengdu Online)
- Linux流媒体服务器架设攻略
- 程序员如何学习和积累
- 数据库范式
- 使用LVM快照做mysql完全备份和lvm的扩容
- Java调用dll详细例子
- HDU 2526 题意不好理解,用到滚动数组
- linux下重装mysql
- 2012成都赛区网络赛第九题---Buildings(hdu4296)
- worklight,建立适配器
- 解题报告-HDOJ-1385(最短路径——Floyd)
- Android 用户定位
- 50万邮件文本分域检索与查询的python实现(结)
- brocade 300光端交换机zone划分