CallStaticObjectMethod всегда возвращает ноль при вызове метода из C ++ с использованием JNI - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть библиотека JAR, которая содержит метод, который я хотел бы использовать для моего проекта C ++. Я использую JNI для вызова метода. Мне удалось вызвать статический метод и передать ему аргументы без проблем. Однако, когда я попытался сделать то же самое с методом, который возвращает строку из Java, я не смог получить возвращаемую строку вообще.

Метод Java:

public static String receiveAckMessage() {
    try {
            in.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        receivedMessage = new String(buffer);
    return receivedMessage;
}

И в проекте C ++ я вызвал метод Java с помощью:

JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
jclass cls = env->FindClass("SendMessage");
            if (cls == nullptr) {
                printf("ERROR: class not found!\n");
            }
            else {
                jmethodID meth = env->GetStaticMethodID(cls, "receiveAckMessage", "()Ljava/lang/String;");
                if (meth != nullptr) {
                    jstring strs = (jstring)env->CallStaticObjectMethod(cls, meth);
                    if (strs != NULL) {
                        const char *strReturn = env->GetStringUTFChars(strs, JNI_FALSE);
                        printf("String: %s\n", strReturn);
                   }
                   else printf("Cannot get return value.\n");
                }
                else {
                    printf("Method not found!\n");
                }
            }

CallStaticObjectMethod всегда возвращает NULL в этот момент, и я не мог пройти мимо. И я также попытался return "Hello World" вместо сообщения из сокета, но результат все тот же. Объект String, возвращаемый из кода Java, всегда равен нулю.

Итак, мой вопрос: как я могу получить возвращаемую строку из метода Java выше?

Большое спасибо за ваше время и помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...