1

我想将字符串作为参数传递给我的 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”,但消息框中显示的字符串没有意义。

Edit2:这是我完整的 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);
} 

我错过了什么?

4

1 回答 1

1

我没有将 JNI 与 C# 一起使用,但使用 C/C++,您的本机代码应该接收jstring类型,而不是字符串,如下所示:

static void Java_FrameWindow_myFunc(int env, int obj, jstring name)

通常,JNI 文档很差(使用 C# 似乎更是如此),因此转向JNI 规范是一个好主意。请注意,JNI 使用修改后的 UTF-8 字符串。

编辑:

EJP 是正确的,您的整个签名不正确。有关更多详细信息,请参阅JNI 规范中的本机方法参数。

static void Java_FrameWindow_myFunc( 
     JNIEnv *env,        /* interface pointer */ 
     jobject obj,        /* "this" pointer */
     jstring s)          /* argument #1 */ 
于 2012-06-25T16:06:27.513 回答