QAndroidJNI callMethod错误

时间:2017-11-23 18:19:42

标签: java android c++ qt android-ndk

我有以下java函数在附件模式下打开USB端口。

public int openAccessory() throws Exception { /* Open stuff */ }
public int closeAccessory() throws IOException { /* Close stuff */ }

我从C ++调用这些函数来实例化一个名为JavaObject的QAndroidJniObject,并执行以下调用:

int AOAConnection::Open() {
    JNIEnvironmentAttacher jea(&this->JNIE);
    return JavaObject.callMethod<jint>("openAccessory");
}

int AOAConnection::Close() {
    JNIEnvironmentAttacher jea(&this->JNIE);
    return JavaObject.callMethod<jint>("closeAccessory", "(V)I");
}

所以这段代码工作正常,花花公子,如果我将第一个C ++调用更改为(我以前做过),那就是:

return JavaObject.callMethod<jint>("openAccessory", "(V)I");

我的程序烧伤并且很难崩溃。为什么是这样?我是否依靠某种扭曲的UB来实现这一目标。

1 个答案:

答案 0 :(得分:1)

 int AOAConnection::Close () {
    JNIEnvironmentAttacher jea(&this->JNIE);
    return JavaObject.callMethod<jint>("closeAccessory", "(V)I");
}
  

所以这段代码工作正常

你很幸运:因为closeAccessory没有采用参数,但你提到它确实得到了一个((V)I)并且没有指定它。所以,是的,我打赌你在这里得到一些未定义的行为然后它并不奇怪(即使可能很难解释为什么详细)如果你用不同的函数调用重复相同的错误你会崩溃... < / p>