文档介绍:JNI学
开篇
·java是跨平台的语言,但是在有些时候仍需调用本地代码(通常由C、C++开发)
·SUN公司提供的JNI是Java平台的一个功能强大的接口,这个JNI接口提供了Java与操作系统本地代码相互调用的功能。
最简单的Java调用C、C++代码的步骤——HelloWorld
·首先在java类中声明一个native方法
.com..jni;
public class HelloWorld {
public void sayHello();// 本地方法声明。
public st native atic void main(String[] args) {
}
}
·使用javah命令生成包含native方法定义的C/C++头文件
.com..::
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <>
/* Header for _jni_HelloWorld */
#ifndef _jni_HelloWorld
#define _jni_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: _jni_HelloWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL _jni_HelloWorld_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
·按照生成的C/C++头文件来写C/C++源文件
【1】打开Visual Studio 2005,新建一个项目:选择Visual C++ àWin32àWin32控制台应用程序à输入项目名JavaNativeà确定à然后选择dllà空项目à完成。
【2】++项目目录之下并将之引入到解决方案的头文件目录下,然后在源文件中新建C++源文件,写具体的实现
#include "";
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL _jni_HelloWorld_sayHello (JNIEnv * evn , jobject obj){
cout<<"Hello World!"<<endl;
}
【3】编译之,出现如下错误:
① fatal error C1083: 无法打开包括文件:“”: No such file or directory
,而这个头文件在JAVAHOME/ include文件夹下面,所以将之拷贝到C++项目的目录下,#include<>,这种方式是在系统目录下找的,因为也需要将之改为#include””,这样就在项目目录下找了。
② fatal error C1083: 无法打开包括文件:“”: No such file or directory
,可以将JAVAHOME/include/win32下找到拷贝到项目目录下。这样编译通过
·将C/C++源文件译成动态连接库(DLL)
点击工具栏上的生成,生成JavaNative,
·将DLL文件加入到PATH环境变量下。
将之前生成的dll文件的目录加入的path环境变量之下
·java类中加载DLL,然后调用声明的native方法
.com..jni;
public class HelloWorld {
public native void sayHello();// 本地方法声明。
public static void main(String[] args) {
("JavaNative");
// Exception in thread "main" : no
// JavaNative in