C++写模块给Java使用

1 建立项目

1在VS2019建立动态库

在这里插入图片描述
在这里插入图片描述

2在IntelliJ IDEA Community Edition 建立一次程序

在这里插入图片描述
tips:注意包名 和 类名
代码如下比较简单

package CJava;

public class NativeClass {
    public native  int nativeAdd(int a,int b);
    public static void main(String[] args) {
        System.loadLibrary("CJAVA");//注意CJAVA 就是我们建立的动态库
        NativeClass a=new NativeClass();
        int v=a.nativeAdd(10,20);
        System.out.println(v1);
    }
}

2 生成Java相关代码

根据自己的环境选择 不同的SDK 但是需要记住保持一致
在这里插入图片描述

这个是生成我这个类的相关C++ 头文件 如下图所示
在这里插入图片描述

tips:Windows 确定Java 路径命令 where java

3 回到VS2019

1 添加上面那个头文件 如图

在这里插入图片描述

2 加入环境

在这里插入图片描述
详细
在这里插入图片描述

3 实现函数

定义:
在这里插入图片描述
实现:
在这里插入图片描述
就是一个加法

4 最后工作

1 VS219生成模块 (tips 请注意请保持是位一致 64/32)

2 intelliJ IDEA Community Edition

在这里插入图片描述
在这里插入图片描述
确定就🆗了 其他IDA 一样的

5 运行效果

在这里插入图片描述
1 第一个是 刚才实现的
2 第二个是通过java 虚拟机实现

6 其他

刚才的Java 虚拟机实现函数如下

JNIEXPORT jdouble JNICALL nativefAdd
(JNIEnv*, jobject, jdouble a, jdouble b)
{
	printf("%s(%d):%s a=%f b=%f\r\n", __FILE__, __LINE__, __FUNCTION__, a, b);
	return a + b;
}

JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM* vm, void* reserved)
{
	jint result = -1;
	JNIEnv* env = NULL;
	if (vm->GetEnv((void**)&env, JNI_VERSION_10) != JNI_OK) //底层 虚拟机
	{
		printf("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
		return -1;
	}

	jclass clz = env->FindClass("CJava/NativeClass");//正规是.
	if (clz == NULL)
	{
		printf("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
		return -1;
	}
	// double doubel doubel 
	JNINativeMethod methods[] = {
		{(char*)"nativefAdd",(char*)"(DD)D",(void*)&nativefAdd}
	};
	result = env->RegisterNatives(clz, methods, sizeof(methods) / sizeof(JNINativeMethod));  //有危险 监控一个java 程序 先使用自己的 调用原来的java    也可以防御 java 可以被逆向 但是具体逻辑是看这里 
	if (result != 0)
	{
		printf("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
		return -1;
	}
	return JNI_VERSION_10;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天晨。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值