【发布时间】:2017-11-23 18:19:42
【问题描述】:
我有以下在附件模式下打开 USB 端口的 java 函数。
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 来实现这一点。
【问题讨论】:
标签: java android c++ qt android-ndk