网站开发准备工作,公司网站空间怎么续费,官方网站旗舰店,商城网站建设-Jni
JNI#xff08;Java Native Interface#xff0c;Java 本地接口#xff09; 是 Java 平台提供的一种编程框架#xff0c;它允许 Java 代码与用其他语言#xff08;主要是 C/C#xff09;编写的本地代码进行交互。简单说#xff0c;JNI 是 Java 调用本地代码的桥梁。…JniJNIJava Native InterfaceJava 本地接口 是 Java 平台提供的一种编程框架它允许 Java 代码与用其他语言主要是 C/C编写的本地代码进行交互。简单说JNI 是 Java 调用本地代码的桥梁。Jni 需要用到一些 C语言的代码。C语言结构体C语言结构体类似java的类只是没有方法(函数)。数组初始化定义好数组长度后就可以用{0} 将所有元素初始化// 所有元素初始化为0 jint localArray[10] {0};字节数组 jbyteArray 转换为结构体JNIEXPORT jbyteArray JNICALL Java_com_cf_lib_w4_W4Parser_calcResult( JNIEnv *env, jclass type, jbyteArray byteArrayParam_){ if ((*env)-IsSameObject(env, byteArrayParam_, NULL)) { cy_log(input parameter byteArrayParam_ error\r\n); return NULL; } int32_t len (*env)-GetArrayLength(env, byteArrayParam_); int32_t sLen sizeof(param_t); if (len ! sLen) { cy_log(input parameter param_ length error\r\n); return NULL; } param_t param {0}; (*env)-GetByteArrayRegion(env, byteArrayParam_, 0, len, (jbyte *)param);结构体转化为 字节数组 jbyteArray int32_t resultLen sizeof(struct_data_t); jbyteArray array (*env)-NewByteArray(env, resultLen); (*env)-SetByteArrayRegion(env, array, 0, resultLen, (const jbyte *)structData);数组转换为 jbyteArrayJNIEXPORT jbyteArray JNICALL Java_com_cf_lib_w4_abc_W4Parser_calc ( JNIEnv *env, jclass type, jbyteArray param_ ) { // 只计算 param_array 数组部分的大小 int32_t array_size sizeof(param_array); // 创建字节数组仅包含 param_array 数据 jbyteArray result (*env)-NewByteArray(env, array_size); if (result NULL) { cy_log(Failed to create byte array\r\n); return NULL; } // 将 param_array 数组数据复制到字节数组 (*env)-SetByteArrayRegion(env, result, 0, array_size, (jbyte *)param_array);jbyteArray 转化为结构体数组JNIEXPORT jbyteArray JNICALL Java_com_cf_lib_w4_abc_W4Parser_calc ( JNIEnv *env, jclass type, jbyteArray param_ ) { if ((*env)-IsSameObject(env, param_, NULL)) { cy_log(input parameter [param_] error\r\n); return NULL; } int32_t total_len (*env)-GetArrayLength(env, param_); // 结构体大小 int32_t element_size sizeof(struct_data_t); // 分配内存存储结构体数组注意使用过 malloc 分配内存最后记得用 free释放。 struct_data_t *param_array (struct_data_t*)malloc(total_len); if (param_array NULL) { cy_log(memory allocation failed.\r\n); return NULL; } // 将Java字节数组转换为结构体数组 (*env)-GetByteArrayRegion(env, param_, 0, total_len, (jbyte *)param_array); // 释放内存 free(param_array); }free 释放内存使用过 malloc 分配内存最后记得用 free释放。// 释放内存 free(param_array);