
[code]

    extern "C"
    JNIEXPORT jint JNICALL
    Java_com_example_xxxx_helloworld_MainActivity_intFromJNI(
            JNIEnv *env,
            jobject /* this */,
            jstring absolutePath) {// 最初の2引数は必須、3つ目から利用したい引数
    
        int nRet = 0;
        std::vector<double> vInfo;
        vInfo.emplace_back(1.1);
        vInfo.emplace_back(2.2);
        vInfo.emplace_back(3.3);
        vInfo.emplace_back(4.4);
    
        return nRet;
    }
    
[/code]

std::vectorのvInfo(実際にどれぐらい作られるかは不明)を何らかの方法でjava側に返す方法を知りたいです。  
引数や戻り値は仮設定のため変更可能です。

**下記で対応可能でした。**

[code]

    extern "C"
    JNIEXPORT jdoubleArray JNICALL
    Java_com_example_xxxx_helloworld_MainActivity_InfoFromJNI(
            JNIEnv *env,
            jobject /* this */,
            jstring absolutePath) {// 最初の2引数は必須、3つ目から利用したい引数を追加
    
        std::vector<double> vInfo;
        vInfo.emplace_back(1.1);
        vInfo.emplace_back(2.2);
        vInfo.emplace_back(3.3);
        vInfo.emplace_back(4.4);
    
        jdouble arrValues[vInfo.size()];
        for(int i = 0; i < vInfo.size(); i++){
            arrValues[i] = vInfo[i];
        };
    
        jdoubleArray dbArray = env->NewDoubleArray(vInfo.size());
        env->SetDoubleArrayRegion(dbArray, 0, vCnfo.size(), arrValues);
    
        return dbArray;
    }
    
[/code]

Java側

[code]

    public native double[] InfoFromJNI(String absolutePath);
    
    double[] dbInfo = InfoFromJNI(imagePath);
    int nLength = dbInfo.length;
    // 後処理
    
[/code]


CC BY-SA 3.0
2018-04-19T01:00:23.087
43364
2018-04-19T04:52:35.947
2018-04-19T04:52:35.947
question
java c++ jni
JNIでJava側にC++で作成した可変長配列を返したい