5

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

在 C++ 中,我有:

数组[0]:
字符串名称 = “我的名字”
整数迭代 = 16
浮点值 = 15
... ETC

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

JNIEXPORT jobjectArray JNICALL Java_com_testing_data_MainActivity_getDATA(JNIEnv *env, jobject obj)
{
// 1º 创建一个临时对象
作业数据类
    {
        jstring名称;
                联合迭代;
                j浮点值;
    };

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

}

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

4

2 回答 2

3

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

于 2012-08-05T09:03:30.607 回答
0

您可以使用字符串将所有数据存储为序列数据。字段由分隔符分隔(例如“:”),如下所示:

std::string sequenceData = "my name" + ":" + "16" + ":" + "15" + ...;

将此序列传递给 java,然后将其拆分以获得所需的值。使用String.split()StringTokenizer

于 2018-02-08T07:53:49.440 回答