doorgeven stringparameter jni

Ik wil string doorgeven als een parameter in met mijn jni. maar wanneer ik het touw passeer; de ontvangen reeks is slechts een betekenis minder karakters. In feite kan ik mijn gewenste string niet doorgeven van Java naar mijn C# -functie.

wat moet ik doen?

Bewerk :

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);
}

en ik stuur string "Hallo" vanuit Java, maar de string in het berichtenvak is zinloos.

Edit2: hier is mijn volledige C# code:

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);
        }
    }
} 

en hier is mijn volledige Java-code:

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);
} 

Wat mis ik?

0
Geef bron + waarden op in debugger.
toegevoegd de auteur Stepan Yakovenko, de bron
Geef de ontbrekende JNI-code op die deze twee stukjes code aan elkaar lijmt.
toegevoegd de auteur EJP, de bron
Ik ken C# niet, maar het is goed om te weten dat Java de reeks intern opslaat in UTF-16.
toegevoegd de auteur n0rm1e, de bron
@ user643540 Ik heb de codes toegevoegd
toegevoegd de auteur Lrrr, de bron
@ejp Ik schrijf de volledige code.
toegevoegd de auteur Lrrr, de bron
@ houman001 tnx voor je reactie, maar ik weet dat en in c ++ en c kunnen we de functie GetStringChars gebruiken, maar wat moeten we doen in C# om die parameter te krijgen?
toegevoegd de auteur Lrrr, de bron

1 antwoord

Ik heb JNI niet met C# gebruikt, maar met C/C ++ moet je systeemeigen code een jstring type, in plaats van string, als volgt:

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

JNI-documentatie is meestal slecht (zelfs nog meer met C# lijkt het), dus wenden zich tot de JNI-specificatie is een goed idee. Merk op dat JNI aangepaste UTF-8-reeksen gebruikt.

BEWERK:

EJP is correct, je hele handtekening is niet correct. Zie Native Method Arguments in de JNI Spec voor meer informatie.

static void Java_FrameWindow_myFunc( 
     JNIEnv *env,        /* interface pointer */ 
     jobject obj,        /* "this" pointer */
     jstring s)          /* argument #1 */ 
0
toegevoegd
Hetzelfde is van toepassing op de parameter 'object'. Het is geen 'int': in feite is het niet eens een object, het is een klasse, omdat de methode statisch is. OP lijkt zojuist de handtekening te hebben gemaakt.
toegevoegd de auteur EJP, de bron