c++ - JNI : How to convert a group of data from c++ to Java

标签 c++ java-native-interface

我正在尝试使用 JNI 将一些数据从 C++ 发送到 Java。

在 C++ 中我有:

Array[0]:
string name = "myName"
int iterations = 16
float value = 15
... etc

所以我想使用 JNI 返回 Java 上的所有数据,我正在尝试这个,但不起作用

JNIEXPORT jobjectArray JNICALL Java_com_testing_data_MainActivity_getDATA(JNIEnv *env, jobject obj)
{
// 1º Create a temp object
jobject dataClass
    {
        jstring name;
                jint iterations;
                jfloat value;
    };

jobject tempObject = env->NewObject(); // Get data in c++ format int temp object type std::vector<dataClass > data = getDataClass(); // First error, must be a c++ class, how could i get it? // How much memory i need? int dataSize = data.size(); // Reserve memory in java format jint tempValues[dataSize]; jobjectArray tempArray = env->NewObjectArray(dataSize,dataClass,0); // 2º Error, it doesn 't create the class // Temporal store data in jarray for (int i = 0; i < dataSize ; i++) { tempArray[i].name = data[i].name; tempArray[i].iterations = data[i].iterations; tempArray[i].value = data[i].value; } return tempArray; // return temp array

这些步骤是否正确以返回包含数据的结构/对象?如何修复错误?

最佳答案

将所有内容都转换为 JNI 类型并不是一个好主意。通常,最好创建一个对等对象,即指向 native 资源的句柄指针 - 就像 Windows GUI 编程中的 hWnd。

关于c++ - JNI : How to convert a group of data from c++ to Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11775304/

相关文章:

线程间抛出异常的C++ Boost代码示例

JNI : unknown type name JNIEnv jint JavaVM 的 C++ 编译错误

android - 我的 Android JNI JPEG 编码器真的很慢

c++ - 如何为 C++ 元组编写折叠/求和函数?

C++ 模板语法

c++ - 删除函数的 std::map

Java JNA native 库调用 NoClassDefFoundError

java - 如何动态加载新的jar文件到JavaVM

java - 访问过时的本地引用,将 short[] 从 JNI 传递给 Java

c++ - QTreeWigetItem - 如何管理点击直接更改项目文本的名称