gpt4 book ai didi

java - JNI : can't convert jstring to LPCTSTR?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:05 25 4
gpt4 key购买 nike

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

知道是什么原因造成的吗?

最佳答案

使用 MessageBoxA - MessageBox 根据您的项目 Unicode/MBCS 设置自动选择 wide 或 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 相同。

关于java - JNI : can't convert jstring to LPCTSTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187219/

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