gpt4 book ai didi

java - 尝试将 TCHAR 类型发送到接受字符串作为参数的 java 函数时,jvm 崩溃

转载 作者:行者123 更新时间:2023-11-28 03:30:00 26 4
gpt4 key购买 nike

当试图将当前正在按下键的窗口的名称从 JNI C 代码发送到 java 方法时,jvm 崩溃了。我认为这是由于传递了无效参数。请解释调用失败的原因以及如何发送参数?

java 方法的原型(prototype)如下:

public void storeNameOfForegroundWindow(String windowName) {
// store in the list
}

JNI C 片段:

 jmethodID callBackToStoreWindowName = (*env)->GetMethodID(env,cls,"storeNameOfForegroundWindow","(Ljava/lang/String;)V");
TCHAR title[500];
GetWindowText(GetForegroundWindow(), title, 500);
jvalue windowName,*warr;
windowName.l = title;
warr = &title;
(*Env)->CallVoidMethodA(Env,object,callBackToStoreWindowName,warr);

JVM 在遇到上述代码片段时崩溃。我知道 jvm 崩溃是由于将无效参数传递给 java 函数(通过 C 代码)。如果是这样,请解释我如何发送参数。我需要将当前窗口的标题发送到 java 函数。

最佳答案

因为你的方法有一个 String 作为它的参数,你应该给它一个 jstring 实例。 JVM 无法理解 TCHAR 是什么。因此,您需要使用以下方法将字符转换为 java 字符串:

(*env)->NewStringUTF(env, title);

编辑:如果 TCHARwchar_t,即 16 位并且可以转换为 jchar,那么您需要使用 NewString 而不是 NewStringUTF。您可以阅读更多 here .

关于java - 尝试将 TCHAR 类型发送到接受字符串作为参数的 java 函数时,jvm 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12871344/

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