我已经尽可能地缩小了我的问题但是已经陷入停顿。使用JNI,我试图在c ++中的jobject实例上调用jmethod,其中java实现将字符串作为参数。我的代码布局如下:
jstring text = env->NewStringUTF("Text to parse")
jclass Parser = getClass(env, "ParserClassPath"); //Invokes FindClass
jmethodID parse = env->GetMethodID(Parser, "parse", "(Ljava/lang/String;)LPathToReturnClass;"
jobject ParserInstance = invokeObj(env, Parser); //Custom method returns class object after calling its constructor
jobject model = env->CallObjectMethod(ParserInstance, parse, text) // I believe problem is in this call
问题,我相信它是在jni.h里面的CallObjectMethod里面展示的。在调试时,在我输入CallObjectMethod之前,text
具有某个内存位置的值,如0x1ba4a238
。 jni.h中的CallObjectMethod如下所示:
jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
va_list args;
jobject result;
va_start(args,methodID);
result = functions->CallObjectMethodV(this,obj,methodID,args); //Check args here
va_end(args);
return result;
}
到达“Check args here”注释行时,在调试器中,args显示一些内存位置的值和一堆随机字符0x00d3fd7c "#&\@a1\2$"
我的问题是,这些字符应该是我通过的内存位置还是字符串?如果没有,我传递的参数是正确的还是我需要使用的其他类型?我对代码中此级别的内容没有真正的了解,所以如果有人可以帮助我理解这个调用的确切内容,那么这也很有帮助。