安卓C+上的Qt+;对于void或primitive返回类型,与SIGSEGV的互操作性失败 我尝试在Android C++上获得Qt5.2.1到java互操作。 我有一段C++代码,使用QANDROIDJNIObjt调用java类上的静态方法。< /P>
这是可行的(先是C++然后是Java): 但是,我有一个方法具有安卓C+上的Qt+;对于void或primitive返回类型,与SIGSEGV的互操作性失败 我尝试在Android C++上获得Qt5.2.1到java互操作。 我有一段C++代码,使用QANDROIDJNIObjt调用java类上的静态方法。< /P>,java,android,c++,java-native-interface,qt5,Java,Android,C++,Java Native Interface,Qt5,这是可行的(先是C++然后是Java): 但是,我有一个方法具有void返回类型,因此: QAndroidJniObject::callStaticObjectMethod( "org/example/AndroidTest", "doSomething", "()V" ); public static void doSomething() { } 方法签名是()V,我理解这是指一个不带参数且返回类型为void的方法,因此它应该与我的Java方法相匹配 问题是在执行时
void
返回类型,因此:
QAndroidJniObject::callStaticObjectMethod(
"org/example/AndroidTest",
"doSomething",
"()V"
);
public static void doSomething() {
}
方法签名是()V
,我理解这是指一个不带参数且返回类型为void
的方法,因此它应该与我的Java方法相匹配
问题是在执行时,当callStaticObjectMethod
调用返回时,这会导致libc中出现SIGSEGV
<如果我添加调试跟踪,我看到java类正确地进入和退出,SIGSEGV在C++代码返回时发生。事实上,如果我更改方法签名以返回int,例如()I,我仍然会看到一个SIGSEGV,因此我非常确定问题与返回类型有关,但我无法理解它失败的原因。如果调用返回void或某个基元类型的Java方法,则应该改用callStaticMethod。此外,如果Java方法不接受任何参数,则可以省略签名,例如:
QAndroidJniObject::callStaticMethod<void>("org/example/AndroidTest", "doSomething");
public static void doSomething()
{
}
jint value = QAndroidJniObject::callStaticMethod<jint>("org/example/AndroidTest", "doSomethingElse");
public static int doSomethingElse()
{
return 1;
}
callStaticMethod(“org/example/AndroidTest”,“doSomething”);
公共静态无效剂量测定法()
{
}
jint value=QAndroidJniObject::callStaticMethod(“org/example/AndroidTest”、“doSomethingElse”);
公共静态int doSomethingElse()
{
返回1;
}
QAndroidJniObject::callStaticMethod<void>("org/example/AndroidTest", "doSomething");
public static void doSomething()
{
}
jint value = QAndroidJniObject::callStaticMethod<jint>("org/example/AndroidTest", "doSomethingElse");
public static int doSomethingElse()
{
return 1;
}