创建一个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