java调用jni

来源:互联网 发布:telnet 测试端口 编辑:程序博客网 时间:2024/06/06 03:17

新建一个java类

 

package com.lh;

public class HelloWorld {
 static{
  System.loadLibrary("dllTest");//该名称是生成的dll的名字
 }
 public native void say();
}

 

 

使用jdk命令 生成 c++ 头文件   【头文件相当于java接口】

 

javah com.lh.HelloWord

 

生成一个 com_lh_HelloWorld.h的头文件

 

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

#ifndef _Included_com_lh_HelloWorld
#define _Included_com_lh_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_lh_HelloWorld
 * Method:    say
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lh_HelloWorld_say
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

JNIEXPORT void JNICALL Java_com_lh_HelloWorld_say
  (JNIEnv *, jobject);  这玩意就是说Java里面 com.lh.HelloWorld下的say方法  有个分号在后面

表示亟待实现

 

新建一个 dynamic link library 工程

 

拷贝生成的头文件到工程中

 

添加一个源文件 名称随便取 比如HelloWordImpl.cpp

 

#include "jni.h"
#include "com_lh_HelloWorld.h"
#include <iostream.h>
JNIEXPORT void JNICALL Java_com_lh_HelloWorld_say(JNIEnv *, jobject)
{
 cout<<"你好jni"<<endl;
 return;
}

 

jni.h是java中的

 

到jdk目录下的include 目录下 拷贝 jni.h 和 jni_md.h到 c++工程中

 

编译 丢到system32 或者  java工程更目录下

 

要丢到哪里 很简单

 

System.out.println(System.getProperty("java.library.path"));

 

输出的接口的地方 都可以丢 dll文件  其中有一个 . 表示当前根目录