简单的JNI的调用的过程

        JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。 

首先用JAVA 写一个本地方法调用类,此类以调用windows 平当上的DLL文为例

class Testdll{
 static {

//加载.dll文件
  System.loadLibrary("testjni"); 
 } 

//将要调用的方法申明为native方法
 public native static int get();
 public native static void set(int i);
 
 public static void main(String args[]){
   Testdll test = new Testdll();

   test.set(10);

   System.out.println(test.get());

 }
}

然后 javac Testdll.java 生成 Testdll.class 文件

再用 javah Testdll 生成 Testdll .h 文件 个文件需要被C/C++程序调用来生成所需的库文件。

第二步: 用VC++ 建一个空的动态链接库工程,

在VC 6.0 的工具-选择-目录里,加上 JDK 的 include 目录,还有下面的 win32 目录

导入 Testdll.h , 用Testdll.cpp 实现.h 文件里的方法.

编辑,生成testjni.dll文件,将它拷到 Testdll.class 目录下,就可成功调用.

 

这是Testdll.h 文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Testdll */

#ifndef _Included_Testdll
#define _Included_Testdll
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Testdll
 * Method:    get
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_Testdll_get
  (JNIEnv *, jclass);

/*
 * Class:     Testdll
 * Method:    set
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_Testdll_set
  (JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif

Testdll.cpp 文件


#include "Testdll.h"

int i=0;

JNIEXPORT jint JNICALL Java_Testdll_get(JNIEnv *, jclass){
 return i;
}

JNIEXPORT void JNICALL Java_Testdll_set(JNIEnv *, jclass, jint j){
 i=j;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值