我想将字符串作为参数传递给我的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);
}
我错过了什么?
答案 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 */