JNI: не можете конвертировать jstring в LPCTSTR? - PullRequest
2 голосов
/ 04 марта 2011

Сторона C ++ выглядит так:

JNIEXPORT jint JNICALL Java_Myclass_showMessage (JNIEnv* env, jobject obj, jstring title, jstring message, jint type)
{
    const char* _title = env->GetStringUTFChars(title, 0);
    const char* _message = env->GetStringUTFChars(message, 0);
    const int result = MessageBox(NULL, (LPCTSTR) _message, (LPCTSTR) _title, type);
    env->ReleaseStringUTFChars(title, _title);
    env->ReleaseStringUTFChars(message, _message);
    return result;
}

И сторона Java:

int result = showMessage("caption", "Hello!", 0);

Однако, когда я вызываю экспортированную функцию из Java, это то, что я получаю:

http://i54.tinypic.com/wu5hs0.png

Есть идеи, что может вызвать это?

1 Ответ

2 голосов
/ 04 марта 2011

Использовать MessageBoxA - MessageBox автоматически выбирает широкую версию или версию mbcs, основываясь на настройках Unicode / MBCS ваших проектов.

Если вам нужно привести к LPCTSTR, это указывает на что-то не так.

В качестве альтернативы используйтеGetStringChars и MessageBoxW, в этом случае вам может потребоваться приведение в зависимости от того, как определен jchar.

РЕДАКТИРОВАТЬ: пример кода

JNIEXPORT jint JNICALL Java_Myclass_showMessage (JNIEnv* env, jobject obj, jstring title, jstring message, jint type)
{
    const jchar* _title = env->GetStringChars(title, 0);
    const jchar* _message = env->GetStringChars(message, 0);
    const int result = MessageBox(NULL, (wchar_t *) _message, (wchar_t *) _title, type);
    env->ReleaseStringChars(title, _title);
    env->ReleaseStringChars(message, _message);
    return result;
}

В этом случае приведение работает, поскольку wchar_t оказывается16 бит в ширину, так же, как jchar.

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