我目前正在使用JNI,我需要将Java对象从C层传递到Java层。 但我不确定这种方法是否正确。
我有一个包含地理位置数据的Java POJO或模型类:
public class Geoloc{
private double latitude;
pivate double longitude;
public Geoloc(double latitude, double longitude){
this.longitude = longitude;
this.latitude = latitude;
}
public double getLatitude(){
return this.latitude;
}
public double getLongitude(){
return this.longitude;
}
public void setLatitude(double lat){
this.latitude = lat;
}
public void setLongitude(double longitude){
this.longitude = longitude;
}
}
我的C功能看起来像
void jni_inc_msg_ind_cbk(...)
{
jclass c = (*envPtr)->FindClass(envPtr, "com/my/geoloc/Geoloc");
if (c == 0) {
ret_val = 0;
}else{
printf("Found class.\n");
}
cnstrctr = (*envPtr)->GetMethodID(envPtr, c, "<init>", "(DD)V");
jgeoloc = (*envPtr)->NewObject(envPtr, c, cnstrctr, jlatitude,
jlongitude);
incChatMethodId = (*envPtr)->GetMethodID(envPtr,ojb, "incChatSessInd",
"????");
(*envPtr)->CallVoidMethod(envPtr, p_pdb->objct, incChatMethodId,jgeoloc);
}
所以我的问题是以下两个语句是一个有效的调用,还有什么是需要传递以取代的确切参数&#34; ????&#34;
incChatSessIndMethodId = (*envPtr)->GetMethodID(envPtr,ojb, "incChatSessInd",
"????");
(*envPtr)->CallVoidMethod(envPtr, p_pdb->objct, incChatSessIndMethodId,jgeoloc);
如果我无法使用java pojo参数调用java方法,我需要在实际实现中添加大约20个参数。这将是非常古怪的。