JNI简介
Java是跨平台的语言,但在有的时候仍需要调用本地代码(这些代码通常由C/C++编写的)。
Sun公司提供的JNI是Java平台的一个功能强大的接口,JNI接口提供了Java与操作系统本地代码互相调用的功能。
Java调C++
1)使用javah命令生成native的头文件
javah com.studio.jni.TestNative
2)C++实现JNI
1)Visual Studio创建dll工程
2)将3个.h文件拷贝到dll工程中
3)修改<jni.h>为”jni.h”
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_studio_jni_TestNative */
#ifndef _Included_com_studio_jni_TestNative
#define _Included_com_studio_jni_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_studio_jni_TestNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_studio_jni_TestNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4)依据.h编写native的实现
#include "com_studio_jni_TestNative.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_com_studio_jni_TestNative_sayHello
(JNIEnv *, jobject){
cout << "Hello,JNI" << endl;
}
5)编译生成dll
3)Java工程引用JNI
1)将.dll添加到环境变量PATH
方式一
方式二
2)Java调用
package com.studio.jni;
public class TestNative {
public native void sayHello();
public static void main(String[] args) {
// 1:将dll添加到环境变量
// 2:加载dll
System.loadLibrary("NativeCode");
// 3:调用
new TestNative().sayHello();
}
}