gpt4 book ai didi

c# - 传递字符串参数jni

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:24 24 4
gpt4 key购买 nike

我想将字符串作为参数传递给我的 jni。但是当我传递字符串时;接收到的字符串只是一个无意义的字符。事实上,我无法将所需的字符串从 java 传递到我的 C# 函数。

我该怎么办?

编辑:

jin.java:

public static native void myFunc( String name);

jin.cs:

public static void java_framewindow_myFunc(int env,int object,string name)
{
messagebox.show(name);
}

我从java发送字符串“Hi”,但消息框中显示的字符串没有意义。

编辑2:这是我完整的 C# 代码:

using System;
using ObjectOrientedJNI;
using System.Windows.Forms;
namespace CSharpInJava {
public class NativeJavaMethods {

static void Java_FrameWindow_myFunc(int env, int obj, string name){
messagebox.show(name);
}
}
}

这是我完整的java代码:

import java.awt.Canvas;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
public class FrameWindow extends Canvas {
int ref = 0;
//Called by JVM to create Canvas' Peer
public void buttom_clicked() {
myFunc("hi");
}
native int myFunc(String name);
}

我错过了什么?

最佳答案

我没有在 C# 中使用 JNI,但在 C/C++ 中,您的 native 代码应该收到 jstring类型,而不是字符串,如下所示:


<strike>static void Java_FrameWindow_myFunc(int env, int obj, <strong>jstring</strong> name)</strike>

通常,JNI 文档很差(对于 C# 来说更是如此),因此转向 JNI Specification是个好主意。请注意,JNI 使用修改后的 UTF-8 字符串。

编辑:

EJP 是正确的,您的整个签名不正确。请参阅Native Method Arguments in the JNI Spec了解更多详情。

static void Java_FrameWindow_myFunc( 
JNIEnv *env, /* interface pointer */
jobject obj, /* "this" pointer */
jstring s) /* argument #1 */

关于c# - 传递字符串参数jni,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175873/

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