2015-09-23 42 views
0

我有我下面的Java代碼怎麼傳出來的參數JNI

public class JNIWrapper { 

static{ 




    System.loadLibrary("JNIDemo"); 
} 

public native String get_error_string(int error_code); 
public native int start(Param_s params); 
public native int cancel(String cookies); 
public native int get_file_name(String cookies,String fileName); 

public native int get_status(String cookies,int percentage_complete); 

} 下面是我的生成.h文件中

/* DO NOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h> 
/* Header for class demo_JNIWrapper */ 

#ifndef _Included_demo_JNIWrapper 
#define _Included_demo_JNIWrapper 
#ifdef __cplusplus 
extern "C" { 
#endif 

JNIEXPORT jstring JNICALL Java_demo_JNIWrapper_get_1error_1string 
    (JNIEnv *, jobject, jint); 


JNIEXPORT jint JNICALL Java_demo_JNIWrapper_1start 
    (JNIEnv *, jobject, jobject); 


JNIEXPORT jint JNICALL Java_demo_JNIWrapper_cancel 
    (JNIEnv *, jobject, jstring); 


JNIEXPORT jint JNICALL Java_demo_JNIWrapper_getfile_1name 
    (JNIEnv *, jobject, jstring, jstring); 


JNIEXPORT jint JNICALL Java_demo_JNIWrapper_get_1status 
    (JNIEnv *, jobject, jstring, jint); 

#ifdef __cplusplus 
} 
#endif 
#endif 

的櫃面可以說GET_STATUS,我想有percent_complete作爲out參數,它返回0,這樣我將返回percentage_complete(因爲它在out參數中)返回值。

任何幫助將高度讚賞,並會是很有益的

注:我不能爲這即使用結構:我can'y同時封裝percentage_complete,並在結構返回的輸出,並返回結構)

+0

Java中沒有'out'參數,因此在JNI本地方法中也沒有。 – EJP

回答

0

你必須返回兩件事:

  1. 錯誤指示。
  2. 整數值。

返回Integer成功的對象,null失敗。更改

public native int get_status(String cookies,int percentage_complete); 

public native Integer get_status(String cookies); 

這將改變你生成的頭文件,你必須讓你的C代碼的相應變化。

+0

但是這隻會返回一個Integer,我想返回一個)error_indication b)out參數是整數值(完成百分比) –

+0

如果你返回null而不是Integer **對象**,那會是你的錯誤指示。 –

+0

不,我的完成百分比可以是70%,錯誤指示爲0,它也可以是100%,error_indication爲80%,也可以是50%,error_indication爲1 –