2011-04-16 54 views
1

實現DLL文件之間的參數下面的代碼是在JAVA聲明如何通過JNI,並通過C++

private native static Vector<Double> computeSimXML(Vector <String> vDocsPath); 

我想通過參數vDocsPath(定義爲向量<字符串>)爲C++,生成的代碼通過JNI如下:(我已經實現了一些)

/* 
* Class:  SimXMLModule 
* Method: computeSimXML 
* Signature: (Ljava/util/Vector;)Ljava/util/Vector; 
*/ 
JNIEXPORT jobject JNICALL Java_SimXMLModule_computeSimXML 
    (JNIEnv *, jclass, jobject) 
{ 
    vector<double> dist; 

    dist.push_back(5.0); 
    dist.push_back(6.0); 

} 

我如何通過jobject得到vDocsPath值,並返回DIST(在Java中定義爲Vector<Double>)以JAVA?

回答

5

這不是一個好的JNI開始函數 - 正確實現它需要一些工作。

  • Vector<String>參數是一個普通的非通用Vector運行時。
  • Vector<Double>返回值是一個普通的非通用Vector運行
  • 您需要檢索類和方法ID,並調用Vector函數來獲取數據了參數
  • 你需要構建一系列Double對象的,設置內部double並調用Vector方法來設置返回值。

我建議你改變函數簽名:

private native static double[] computeSimXML(String[] vDocsPath); 

JNI接口的使用數組是很多比你想做什麼簡單。您可以使用GetArrayLengthGetObjectArrayElement迭代參數,並且您可以使用NewDoubleArray,GetArrayElementsReleaseArrayElements

創建和處理返回值