这是jni接口头文件,给出程序的头部说明,每个模块给出详细的接口说明,请给出所有JNI接口相应的C++语言完整的接口程序和代码说明,并且分模块输出单独文件,若内容较多可部分输出
其中,另外每一个JNI接口实现的函数进行序列号编码
#include <jni.h>
#ifndef _Included_ui_data_common_regexi
#define _Included_ui_data_common_regexi
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jlong JNICALL Java_ui_data_common_regexi_new_1Regex (JNIEnv *, jclass, jstring, jboolean);
JNIEXPORT void JNICALL Java_ui_data_common_regexi_delete_1Regex (JNIEnv *, jclass, jlong);
JNIEXPORT jboolean JNICALL Java_ui_data_common_regexi_Regex_1matchRegExp (JNIEnv *, jclass, jlong, jstring);
#ifdef __cplusplus
}
#endif
#endif
特别注意:请参考如下的 header 文件和C++代码形式
header文件参考1:
/**
* @file ahier_common.h
* @brief AHIER模块公共头文件
*
* 该文件定义了AHIER模块的公共常量、枚举和基础数据结构。
* 包括信号类型、网络类型、终端类型等共享定义。
*
* AHIER (Advanced Hierarchical Integrated Electronic Representation)
* 提供层次化电子设计表示的完整数据结构和管理功能。
*/
#ifndef AHIER_COMMON_H
#define AHIER_COMMON_H
#include <jni.h>
#include <string>
#include <map>
// Param 类定义
class Param {
public:
std::string name;
int type;
std::string description;
bool hidden;
bool boolValue;
int intValue;
float floatValue;
std::string stringValue;
// 数值范围
bool hasRange;
int intLowerBound;
int intUpperBound;
float floatLowerBound;
float floatUpperBound;
};
// 参数映射表
std::map<std::string, Param> paramMap;
// 将 Java 字符串转换为 C++ 字符串
std::string jstringToStdString(JNIEnv* env, jstring jstr) {
const char* raw = env->GetStringUTFChars(jstr, nullptr);
std::string result(raw);
env->ReleaseStringUTFChars(jstr, raw);
return result;
}
// 将 C++ 字符串转换为 Java 字符串
jstring stringToJString(JNIEnv* env, const std::string& str) {
return env->NewStringUTF(str.c_str());
}
// 01. 获取参数名称
JNIEXPORT jstring JNICALL Java_ui_data_common_parami_Param_1getName(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return stringToJString(env, param->name);
}
// 02. 获取参数类型
JNIEXPORT jint JNICALL Java_ui_data_common_parami_Param_1getType(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->type;
}
// 03. 获取参数描述
JNIEXPORT jstring JNICALL Java_ui_data_common_parami_Param_1getDescription(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return stringToJString(env, param->description);
}
// 04. 判断参数是否有范围
JNIEXPORT jboolean JNICALL Java_ui_data_common_parami_Param_1hasRange(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->hasRange ? JNI_TRUE : JNI_FALSE;
}
// 05. 获取整数下界
JNIEXPORT jint JNICALL Java_ui_data_common_parami_Param_1getIntLowerBound(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->intLowerBound;
}
// 06. 获取整数上界
JNIEXPORT jint JNICALL Java_ui_data_common_parami_Param_1getIntUpperBound(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->intUpperBound;
}
// 07. 获取浮点下界
JNIEXPORT jfloat JNICALL Java_ui_data_common_parami_Param_1getFloatLowerBound(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->floatLowerBound;
}
// 08. 获取浮点上界
JNIEXPORT jfloat JNICALL Java_ui_data_common_parami_Param_1getFloatUpperBound(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->floatUpperBound;
}
// 09. 获取布尔值
JNIEXPORT jboolean JNICALL Java_ui_data_common_parami_Param_1getBoolValue(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->boolValue ? JNI_TRUE : JNI_FALSE;
}
// 10. 获取整数值
JNIEXPORT jint JNICALL Java_ui_data_common_parami_Param_1getIntValue(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->intValue;
}
// 11. 获取浮点值
JNIEXPORT jfloat JNICALL Java_ui_data_common_parami_Param_1getFloatValue(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->floatValue;
}
// 12. 获取字符串值
JNIEXPORT jstring JNICALL Java_ui_data_common_parami_Param_1getStringValue(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return stringToJString(env, param->stringValue);
}
// 13. 判断是否隐藏
JNIEXPORT jboolean JNICALL Java_ui_data_common_parami_Param_1isHidden(JNIEnv *env, jclass, jlong handle) {
Param* param = reinterpret_cast<Param*>(handle);
return param->hidden ? JNI_TRUE : JNI_FALSE;
}
// 14. 设置隐藏状态
JNIEXPORT void JNICALL Java_ui_data_common_parami_Param_1setHidden(JNIEnv *env, jclass, jlong handle, jboolean flag) {
Param* param = reinterpret_cast<Param*>(handle);
param->hidden = (flag == JNI_TRUE);
}
#endif // AHIER_COMMON_H
C++代码参考2:
/**
* @file ahier_element_vector.cpp
* @brief AHElement向量操作模块实现
*
* 该模块提供AHElement向量的创建、管理、遍历功能。
* 支持元素的添加、删除、遍历和大小查询等操作。
* 使用智能指针管理内存,确保资源安全。
*/
#include "ahier_common.h" // 引入 Param 定义
#include <jni.h>
#include <string>
#include <map>
// ParamMgr 类定义
class ParamMgr {
public:
std::map<std::string, Param> params;
// 注册布尔参数
void registerBoolParam(const std::string& name, const std::string& desc, bool value) {
Param p;
p.name = name;
p.description = desc;
p.type = 0; // 假设 0 表示布尔类型
p.boolValue = value;
params[name] = p;
}
// 注册整型参数
void registerIntParam(const std::string& name, const std::string& desc, int value) {
Param p;
p.name = name;
p.description = desc;
p.type = 1; // 假设 1 表示整型
p.intValue = value;
params[name] = p;
}
// 注册带范围的整型参数
void registerIntParamWithRange(const std::string& name, const std::string& desc, int value, int min, int max) {
Param p;
p.name = name;
p.description = desc;
p.type = 1;
p.intValue = value;
p.hasRange = true;
p.intLowerBound = min;
p.intUpperBound = max;
params[name] = p;
}
// 注册浮点参数
void registerFloatParam(const std::string& name, const std::string& desc, float value) {
Param p;
p.name = name;
p.description = desc;
p.type = 2; // 假设 2 表示浮点类型
p.floatValue = value;
params[name] = p;
}
// 注册带范围的浮点参数
void registerFloatParamWithRange(const std::string& name, const std::string& desc, float value, float min, float max) {
Param p;
p.name = name;
p.description = desc;
p.type = 2;
p.floatValue = value;
p.hasRange = true;
p.floatLowerBound = min;
p.floatUpperBound = max;
params[name] = p;
}
// 注册字符串参数
void registerStringParam(const std::string& name, const std::string& desc, const std::string& value) {
Param p;
p.name = name;
p.description = desc;
p.type = 3; // 假设 3 表示字符串类型
p.stringValue = value;
params[name] = p;
}
};
// 管理器单例
ParamMgr defaultManager;
// 15. 获取默认的 ParamMgr 实例
JNIEXPORT jlong JNICALL Java_ui_data_common_parami_ParamMgr_1getParamMgr(JNIEnv *env, jclass) {
return reinterpret_cast<jlong>(&defaultManager);
}
// 16. 查找参数
JNIEXPORT jlong JNICALL Java_ui_data_common_parami_ParamMgr_1findParam(JNIEnv *env, jclass, jlong handle, jstring name) {
ParamMgr* mgr = reinterpret_cast<ParamMgr*>(handle);
std::string paramName = jstringToStdString(env, name);
auto it = mgr->params.find(paramName);
if (it != mgr->params.end()) {
return reinterpret_cast<jlong>(&it->second);
}
return 0;
}
// 17. 参数是否存在
JNIEXPORT jboolean JNICALL Java_ui_data_common_parami_ParamMgr_1paramExists(JNIEnv *env, jclass, jlong handle, jstring name) {
ParamMgr* mgr = reinterpret_cast<ParamMgr*>(handle);
std::string paramName = jstringToStdString(env, name);
return (mgr->params.count(paramName) > 0) ? JNI_TRUE : JNI_FALSE;
}
// 18. 获取参数类型
JNIEXPORT jint JNICALL Java_ui_data_common_parami_ParamMgr_1getType(JNIEnv *env, jclass, jlong handle, jstring name) {
ParamMgr* mgr = reinterpret_cast<ParamMgr*>(handle);
std::string paramName = jstringToStdString(env, name);
auto it = mgr->params.find(paramName);
return it != mgr->params.end() ? it->second.type : -1;
}
// 19. 获取参数描述
JNIEXPORT jstring JNICALL Java_ui_data_common_parami_ParamMgr_1getDescription(JNIEnv *env, jclass, jlong handle, jstring name) {
ParamMgr* mgr = reinterpret_cast<ParamMgr*>(handle);
std::string paramName = jstringToStdString(env, name);
auto it = mgr->params.find(paramName);
if (it != mgr->params.end()) {
return stringToJString(env, it->second.description);
}
return NULL;
}
最新发布