1

jniで文字列をパラメーターとして渡したいです。しかし、文字列を渡すと; 受け取った文字列は単なる意味のある文字です。実際、目的の文字列を Java から C# 関数に渡すことができません。

私は何をすべきか?

編集 :

ジン.java:

public static native void myFunc( String name);

ジン.cs:

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

javaから文字列「こんにちは」を送信しましたが、メッセージボックスに表示される文字列は意味がありません。

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

私はC#でJNIを使​​用していませんが、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 に答える