I have C method with varargs
voidmessage(intid,…)
anditshouldcalljavastaticmethodwithvararg
公共静态语音消息(醉熏的皮带、字符串. args ) )。
howcanidoitusingcvalistandjniapi?
汉克you!
解决方案
yurnotlikelytogetanyuseoutofpassingtheaddressofava _ listuptojava.hereareafewsnippetshowinghowtopassupanarrayusing ' . '。
In Java:
staticprivatevoidjavadefinearray (object . args )。
for(objecto:args ) {
打印(javadefinearray ) o;
}
}
In C:
//lookupthemethodusinggetmethodidorpsdgb/pmid=(* env )-getstaticmethodid (env,class,' javaDefineArray ',) )
//cfunctiontakingvariableargs (allstringinthisexample ) )。
staticvoidjavadefinearray (kqdfsenv,jobject o,) )。
int i=0;
int count=0;
char * msg[100 1]={0}; //100 args max
jobjectArray ja;
va_list list;
va_start(list,o );
do{msg[count]=va_arg(list,char * );
}while(msg[count]!=0 count 100; //end/saftey check
va_end(list;
for(I=0; I!=计数; I ) {
(env )-setobjectarrayelement (env,ja,I,) ) env )-new string utf (env,msg[i] );
}
(env )-callvoidmethod(env,o,mid,ja );
}
C Usage: