1.首先给出Java文件源码:
public class TestNative{
static{
System.loadLibrary("CppHello");
}
public static void main(String [] args){
new TestNative().info();
}
public native void info();
}
编译:D:\Study Source>javac TestNative.java
生成宏文件:D:\Study Source>javah TestNative
2.打开生成的宏文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNative */
#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestNative
* Method: info
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_TestNative_info
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
可以看到这里已经声明了方法JNIEXPORT void JNICALL Java_TestNative_info (JNIEnv *, jobject),因此下一步只需要建立cpp文件,然后implement这个方法。
3.新建一个CppHello.cpp文件:
#include <stdio.h>
#include <iostream>
#include "TestNative.h"
JNIEXPORT void JNICALL Java_TestNative_info(JNIEnv *, jobject)
{
std::cout << "Hello world!" << std::endl;
return;
}
打开Visual Studio 命令提示,当然前提是你电脑上已经装了Visual Studio,然后编译:
D:\Study Source>cl -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -LD CppHello.cpp /EHsc
4.运行Java程序
因为我的CppHello.dll在目录D:\Study Source下,因此执行:
D:\Study Source>java -Djava.library.path="D:\Study Source" TestNative
最终输出:Hello world!
我这里只是简单的举例JNI调用非Java程序的应用,关于JNI的其他应用,请参考http://wenku.baidu.com/view/790dbf7f5acfa1c7aa00cc41.html这个文档写的很详细。