将字符串从c ++传递到jni CallObjectMethod

时间:2017-06-27 15:57:52

标签: java c++ java-native-interface

我已经尽可能地缩小了我的问题但是已经陷入停顿。使用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$"

我的问题是,这些字符应该是我通过的内存位置还是字符串?如果没有,我传递的参数是正确的还是我需要使用的其他类型?我对代码中此级别的内容没有真正的了解,所以如果有人可以帮助我理解这个调用的确切内容,那么这也很有帮助。

0 个答案:

没有答案