QAndroidJNI callMethod error

QAndroidJNI callMethod error

本文关键字:error callMethod QAndroidJNI      更新时间:2023-10-16

我具有以下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来工作。

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

所以此代码正常工作

您只是幸运的是:因为closeAccessory不采用paramater,但您提到它确实会得到一个((V)I),并且无论如何都没有指定它。所以,是的,我敢打赌,您在这里获得了一些不确定的行为,然后并不奇怪(即使很难解释为什么要详细解释),如果您重复使用其他功能的同一错误,您会崩溃...

相关文章: