传递字符串参数jni

时间:2012-06-24 07:54:37

标签: c# java java-native-interface parameter-passing

我想将字符串作为参数传递给我的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);
} 

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

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

通常,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 */