使用jin进行java的交互,用一个例子来说明
第一步:编写Java代码
第二步:编译Java代码
第三步:生成C语言头文件
第四步:编写C代码
第五步:生成C共享库
第六步:运行Java程序
//也就是说,我们的native sayHello()方法实际上是运行C的Java_NativeDemo_sayHello()这个方法,我们是不能随意写C函数名的的,只能这样写。
第一步:编写Java代码
public class jn {
static {
System.load("后面还要改");
}
public native void sayhello();
public static void main(String[] args) {
new jn().sayhello();
}
}
第二步:编译Java代码
第三步:生成C语言头文件
使用java传统的javac编译java为字节码文件,再使用
java -h . jn.java
将jn编译为c++头文件
第四步:编写C代码(这部进行在第五步之后)
打开产生的头文件,是这样的
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class java2cpp_jn */
#ifndef _Included_java2cpp_jn
#define _Included_java2cpp_jn
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: java2cpp_jn
* Method: sayhello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_java2cpp_jn_sayhello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
编写cpp文件,实现其中的Java_java2cpp_jn_sayhello函数
#include <iostream>
#include <C:\Users\27879\eclipse_LearnPlace\java2cpp\src\java2cpp\java2cpp_jn.h>
#include <windows.h>
using namespace std;
JNIEXPORT void JNICALL Java_java2cpp_jn_sayhello(JNIEnv *,jobject){
cout<<"Hello ,I'm a funtion from cpp"<<endl;
}
第五步:生成C共享库
生成dll文件。使用dynamic link lib 创建项目
在其中添加一个cpp文件,进行第四步。
编译main文件。其内容如下的
//这一块我还有点迷
第六步:运行Java程序
将java中system.load修改。改为ddl的确切存在路径
开始调用
bug:Can’t load IA 32-bit .dll on a AMD 64-bit platform
32位的mingw和64 bit 的jdk不兼容