JNI

//java代码

public class Jnilx {
	
	public static void main(String[] args) {
		Jnilx jnilx=new Jnilx();
		String password=jnilx.getPassWordString();
		System.out.println("PassWor:"+password);
	}
	
	//使用 native修饰方法 此方法获取从c端方法里返回的数据
	public native String getPassWordString();
	
}

打开cmd切换到java项目src目录,调用javah生成.h头文件

javah -d ../jni -jni com.xu.jni.Jnilx   

-d …/jni 输出到jni文件 -jni生成头文件命令 com.xu.jni.Jnilx 类的完整包名

使用vs创建c++项目,然后将刚刚生成头文件拷贝到与.cpp文件同一文件夹内并引入头文件,打开头文件
引入头文件方法,添加现有项即可
在这里插入图片描述

在这里插入图片描述

发现这里报错,因为是引入外部头文件,所有需要将<>替换成“”
在这里插入图片描述
然后在找到jdk安装目录,在jdk内搜索到jni.h和jni_md.h,将这两个文件也复制到vs项目.cpp文件的文件夹内并引入头文件

编写c的代码

#include "com_xu_jni_Jnilx.h"  引入javah命令生成的头文件

JNIEXPORT jstring JNICALL Java_com_xu_jni_Jnilx_getPassWordString
(JNIEnv * env, jobject jobj){
	return env->NewStringUTF("123456"); //返回一个字符串  

}

在这里插入图片描述
点击调试选择最后一项属性
在这里插入图片描述
在配置属性的常规的配置类型里改为dll动态库
在这里插入图片描述
然后点击生成 生成解决方案
在这里插入图片描述
如上所示生成功,生成的dll文件在项目的debug文件夹内

public class Jnilx {
	
	public static void main(String[] args) {
		Jnilx jnilx=new Jnilx();
		String password=jnilx.getPassWordString();
		System.out.println("PassWor:"+password);
	}
	
	public native String getPassWordString();
	
	//引入动态库
	static {
	// 引入加载我们的动态库 
		// System.loadLibrary :android 加载apk中的libs目录下 .so 库
		// System.load : 加载一个具体路径上的 .so 库,去服务器上下载再进行加载(data/data)
		System.load("E:/vsstudiocode/JniLx/x64/Debug/JniLx.dll");
	}
}

在java代码中引入动态库,然后运行java代码,打印出c返回的字符串
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值