0

文字列配列を配信する方法は?

私はコードを投稿します:

xx.cpp

JNIEXPORT jstring JNICALL Hello_Native(JNIEnv *env, jobject obj,jstring string)
{
    const char *str = env->GetStringUTFChars(string, 0);
    return env->NewStringUTF( "Hello from JNI !");
}
static JNINativeMethod gMethods[] = {
   {"JniHello",const_cast<char*>("(Ljava/lang/jsting)Ljava/lang/jsting;"),(void*)Hello_Native}

xx.java

public native static String JniHello(String text);

JniHelloシステムは、宣言時に問題がgMethodsあり、パラメータが正しくない場合は常にプロンプ​​トを表示します。

4

3 に答える 3

2
  1. JNICALL 関数に誤ったマニュアル名を使用するのをやめます。javah正しく生成されます。Java 名がJniHelloclassMyHelloにあり、パッケージがであるcom.hello場合、JNICALL 関数は である必要がありますJava_com_hello_MyHello_JniHello。それはできませんHello_Native、あなたはそれを作りました。
  2. JNINativeMethodもちろん、この正しい関数名を構造体の最後のメンバーで使用する必要があります
  3. のようなクラスはありませんjava/lang/jstingjava/lang/jstring私があなたのために欠けているものを追加してもありませrん。JNI ではなく、JAVA 署名を求められます。そうでなければなりませんjava/lang/String
  4. 追加(@EJPに感謝):JNI署名に間違った手動文字列を使用するのをやめ、javap -s代わりにの出力を使用します

コードにはもう 1 つ問題GetStringUTFCharsがあります。しかし、遅かれ早かれ、あなたはこれを自分で見つけるでしょう。

于 2013-01-29T14:17:37.327 に答える
1

const_cast("(Ljava/lang/jsting)Ljava/lang/jsting;") スペルエラー、const_cast("(Ljava/lang/jsting)Ljava/lang/jstring;")

jsting ==> jstring

于 2013-08-31T09:33:00.620 に答える