gpt4 book ai didi

java - 通过 C++ 向 Java 发送参数

转载 作者:行者123 更新时间:2023-11-30 02:50:18 24 4
gpt4 key购买 nike

我的 java 类有一个静态函数定义如下:

public static void logEvent(final String eventName, final String jObject) {
//Function data
}

现在我的cpp文件有如下功能

void PingoScreen::callApslarIntegration(){
char* eventName="bingo";
JniMethodInfo t;

if (JniHelper::getStaticMethodInfo(t, "com/myapp/test/ApslarSetup","logEvent", "()V")) {
t.env->CallStaticVoidMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
}
}

如何通过 JNI 将两个字符串参数发送到 JAVA 函数?

亲切的问候

============================================= ================

void PingoScreen::callApsIntegration() {

JniMethodInfo t;

if (JniHelper::getStaticMethodInfo(t, "com/myapp/test/ApslarSetup",
"logJSONEvent", "()V")) {

const char* cstr1 = "Test1";
const char* cstr2 = "Test2";

jstring jstr1 = t.env->NewStringUTF(cstr1);
jstring jstr2 = t.env->NewStringUTF(cstr2);

t.env->CallStaticVoidMethod(t.classID, t.methodID,jstr1,jstr2);
t.env->DeleteLocalRef(t.classID);
}
}

上述函数导致崩溃?

==================================

终于成功了

void PingoScreen::callApslarIntegration() {
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo
(t, "com/nbs/test/ApslarSetup",
"logJSONEvent",
"(Ljava/lang/String;Ljava/lang/String;)V")) {

const char* cstr1 = "Test1";
const char* cstr2 = "Test2";

jstring jstr1 = t.env->NewStringUTF(cstr1);
jstring jstr2 = t.env->NewStringUTF(cstr2);

t.env->CallStaticVoidMethod(t.classID, t.methodID,jstr1,jstr2);
t.env->DeleteLocalRef(t.classID);
}
}

崩溃是因为线路

if (JniHelper::getStaticMethodInfo
(t, "com/nbs/test/ApslarSetup",
"logJSONEvent",
"(Ljava/lang/String;Ljava/lang/String;)V"))

签名必须是 Ljava/lang/String;Ljava/lang/String; 而不是 Ljava/lang/String;Ljava/lang/String(注意最后一个分号)

最佳答案

如果你想使用CallStaticVoidMethod,只需将两个jstring传递给它,就像这样:

const char* cstr1 = "Test1";
const char* cstr2 = "Test2";
jstring jstr1 = t.env->NewStringUTF(cstr1);
jstring jstr2 = t.env->NewStringUTF(cstr2);
t.env->CallStaticVoidMethod(t.classID, t.methodID, jstr1, jstr2);

您还可以使用 CallStaticVoidMethodACallStaticVoidMethodV 而不是简单地使用 CallStaticVoidMethod。查看documentation here .

关于java - 通过 C++ 向 Java 发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com