5

JNIを使​​用してC++からJavaにデータを送信しようとしています。

C++では次のようになります。

配列[0]:
文字列名="myName"
int反復=16
フロート値=15
...など

したがって、JNIを使​​用してJava上のすべてのデータを返したいので、これを試していますが、機能しません

JNIEXPORT jobjectArray JNICALL Java_com_testing_data_MainActivity_getDATA(JNIEnv * env、jobject obj)
{{
//1º一時オブジェクトを作成します
jobject dataClass
    {{
        jstring名;
                ジントの反復;
                jfloat値;
    };

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 に答える