使用 Jni 包装 C++ 库
wrapping c++ library using Jni
我想做一个包装器,用Jni包装c ++库。基本上,我有第三方库,可以从文件中读取点(x,y,z)。因此,文件路径必须是输入参数。我的 JNI 是这样的
JNIEXPORT void JNICALL to_the_path_loadFile( JNIEnv *env, jobject obj,jstring filePath)
JNIEXPORT jdouble JNICALL to_the_path_getX( JNIEnv *env, jobject obj, jint index)
第一种方法将加载文件,第二种方法将获取坐标 x。
由于文件有大量点,我无法将它们全部加载到内存中。我的想法是使用迭代器迭代每个点并将其包装到 Java 对象。这意味着我必须多次打电话getX()
。
我的问题是如何避免多次加载文件流?我是 c++ 的新手,有没有办法可以引用回 c++ 对象,以便我能够知道我在读哪一点?
类似于 Turix 的解决方案,但没有C++全局变量。loadFile()
返回文件描述符并将其传递给getX()
。您还应该有一个closeFile()
方法,用于在检索所有 X 值后关闭打开的文件。
由于您有很多值,因此您还可以getX()
双精度的本机数组传递,以便它可以在一次调用中检索许多值。这是一个不同的设计,但它会更有效。
此外,请考虑使用 SWIG 创建包装类。它使创建和管理 Java 端变得更加容易。
是的,有几种方法可以做到这一点,但最简单的方法可能是在C++代码中保留文件的全局变量,该变量由loadFile()
调用初始化并由getX()
调用引用。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 创建包装升压适配器的自定义范围类
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 使用运算符*重载包装矩阵乘法