java和cpp混合编程--jni的使用

使用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不兼容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值