c++ java_Java开发

c++ java_Java开发创建一个Java项目,编码选择utf8编译Java文件生成.h文件将.h文件拷贝到C++项目中实现方法编译生成解决方案,并复制路径E:\VS2017\edoyun\x64\Release运行输入结果进阶:实现手动注册一

创建一个Java项目,编码选择utf8
在这里插入图片描述
编译Java文件生成.h文件
在这里插入图片描述
在这里插入图片描述
将.h文件拷贝到C++项目中
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实现方法
在这里插入图片描述
编译生成解决方案,并复制路径E:\VS2017\edoyun\x64\Release
在这里插入图片描述

在这里插入图片描述
运行输入结果
在这里插入图片描述
进阶:实现手动注册一个实现的方法
在这里插入图片描述
在这里插入图片描述
完整代码如下:

package eDoYun;

public class NativeClass { 
   
	public native int nativeAdd(int a, int b);

	public native double nativefAdd(double a, double b);

	public static void main(String[] args) { 
   
		System.loadLibrary("edoyun");// 要生成的C++模块

		NativeClass a = new NativeClass();

		a.nativeAdd(10, 20);

		a.nativefAdd(1.234, 2.345);
	}
}

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include"eDoYun_NativeClass.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{ 
   
    switch (ul_reason_for_call)
    { 
   
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

//实现方式1:通过命名规则绑定
JNIEXPORT jint JNICALL Java_eDoYun_NativeClass_nativeAdd
(JNIEnv *, jobject, jint a, jint b) { 
   
	//打印日志和a,b的值
	printf("%s(%d):%s a=%d b=%d\r\n", __FILE__, __LINE__, __FUNCTION__, a, b);
	return a + b;
}

//实现方式2:手动注册方法绑定
JNIEXPORT jdouble JNICALL nativefAdd
(JNIEnv *, jobject, jdouble a, jdouble b) { 
   
	//打印日志和a,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_1_1) != JNI_OK) { 
   
		printf("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
	}
	jclass clz = env->FindClass("eDoYun/NativeClass");
	if (clz == NULL) { 
   
		printf("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
		return -1;
	}

	JNINativeMethod methods[] = { 
   
		{ 
   (char*)"nativefAdd",(char*)"(DD)D",(void*)&nativefAdd}//"(DD)D"两个参数都是double返回值也是double
	};

	//注册
	result = env->RegisterNatives(clz, methods, sizeof(methods) / sizeof(JNINativeMethod));
	if (result != 0) { 
   
		printf("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
		return -1;
	}

	return JNI_VERSION_1_1;
}

今天的文章c++ java_Java开发分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66964.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注