- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
我的 Java 类中有一个字符串变量: public class myclass { protected final String file; myclass(String f) {
JNIEXPORT int JNICALL Java_com_ndkfoo_test_GL2JNILib_step2(JNIEnv * env, jobject obj, jstring fileP
我一直在尝试调用具有以下签名的 C 函数 int changeFoo(L_TCHAR* pszFileSrc){....} 在我的 JNI 调用中,我的方法如下所示: JNIEXPORT jint J
当我尝试将 WCHAR_T* 传递给 java 方法时,应用程序崩溃了。 我有 WCHAR_T* 变量及其长度。 我知道如何将它转换为 jstring 以调用 java 方法。 我的 C++ 代码:
这是我的 JNI C 代码: JNIEXPORT jint JNICALL Java_org_avuna_httpd_util_CLibJNI_bind(JNIEnv * this, jclass c
C++ 端看起来像这样: JNIEXPORT jint JNICALL Java_Myclass_showMessage (JNIEnv* env, jobject obj, jstring titl
我正在调用一个返回字符串的 Java 函数: QAndroidJniObject obj = QAndroidJniObject::callStaticObjectMethod("HelloJava"
我对JNI知之甚少|以及内部的处理方式 JNI环境。我有一个简单的问题。 我在 Java 中有一个方法调用 JNI方法并传递一个 String在参数中。 JNI方法在 jstring 中接受该字符串对
#include #include "Package_MyTester.h" jstring Java_Package_MyTester_NMethod (JNIEnv *env, jobject
假设在 C++ 端,我的函数采用类型为 jstring 的变量,名为 myString。我可以将其转换为 ANSI 字符串,如下所示: const char* ansiString = env->Ge
我正在使用下面的 JNI 代码将 jchararray 转换为 jstring,但我在 Linux 中只获得第一个字符。 char *carr =(char*)malloc(length+1); (
我需要在我的 native 代码中使用 const char * 所以,我将 java 端的参数作为 jstring 并使用以下语句 JNIEXPORT int JNICALL JNIFUNCTION
我正在尝试将 wstring 从我的 cpp 代码转换为 jstring。 我知道有一个名为 NewStringUTF 的方法可以从 std::string 获取 jstring(当然是在从该字符串获
我的 cpp 代码包含一个我希望转换为 const char* 的 jni 函数。这是我正在使用的代码 extern "C" { void Java_com_sek_test_JNITest_prin
我正在使用 basic_string类型并需要将其转换为 jstring 以通过 JNI 层。我想知道最好的方法是什么。我有一个函数可以给我 std::string来 self 的 basic_str
我正在尝试将 C++ std::string 转换为 jstring 并将其返回。这将很容易 JNIEnv*->NewStringUTF(stdString.c_str()) 但问题是我正在转换的字符
我通过使用 JNI 将一个 URL 字符串从 Java 传递到 C 代码作为 jstring 数据类型。我的库方法需要一个 char * 作为 url。 如何在 char * 中转换 jstring
我正在尝试为现有 C++ 代码创建 Java 接口(interface)。 我的功能之一与此类似: JNIEXPORT jstring JNICALL Java_com_testproxy_Nativ
我们最近从 Jerkson 切换到 json4s,很快发现这两个库的默认反序列化行为大相径庭。 我们遇到的一个问题是我们有时会收到 json 输入,其中数字字段表示为字符串而不是数字 //exampl
我在 unix 中将 wstring 转换为 jstring 时遇到问题,因为 linux 上 wchar_t 的大小为 4 个字节(不像 Windows 是 2 个字节,因此我无法将 wchar_t
我是一名优秀的程序员,十分优秀!