2011-06-28 12 views
1

私のJavaプログラムでクラスをインスタンス化しようとしました。私はいくつかのより簡単な例が働いていましたが、私のJavaクラスが文字列配列をコンストラクタとして受け取るという問題を打ちました。JNI経由で.cファイルからjava dllに文字列の配列を渡す

私の質問は、どのように.cファイルでJavaクラスに渡すことができる文字列配列を作成するのですか?

私は1つのjStringオブジェクトを渡すことができました。

私の.cファイルのメソッドを強調します。

jobject newClassInstance() 
{ 

    jmethodID MID_init; 
    jobject obj; 
    jstring name; 
    jobjectArray ret; 

    MID_init = (*env)->GetMethodID (env, jClass, "<init>", "([Ljava/lang/String;)V"); 
    if (!MID_init) { 
     printf("Error: dllClass.<init>() not found\n"); 
     return NULL; 
    } 

    name = (*env)->NewStringUTF(env,"Moo"); 




    obj = (*env)->NewObject(env, jClass, MID_init, name); 
    if (!obj) { 
     printf("Error: failed to allocate an object\n"); 
     return NULL; 
    } 
    return obj; 
} 

これ以上情報が必要な場合はお知らせください。

種類よろしく

アッシュ

答えて

5
  • まず文字列の配列を作成します。
  • すべての要素文字列を作成します。
  • Arrayオブジェクトを使用してJava Initializerを呼び出します。

サンプルコード:

jobjectArray stringArray; 
jString tmp; 
char *stringA = "Test1"; 
char *stringB = "Test2"; 
jclass clsString; 
jint size = 2; 

clsString = (*env)->FindClass(env, "java/lang/String"); 
stringArray = (*env)->NewObjectArray(env, size, clsString, 0); 

tmp = (*env)->NewStringUTF(env, stringB); 
(*env)->SetObjectArrayElement(env, stringArray, 0, tmp); 

tmp = (*env)->NewStringUTF(env, stringA); 
(*env)->SetObjectArrayElement(env, stringArray, 1, tmp); 

obj = (*env)->NewObject(env, jClass, MID_init, stringArray); 
+0

これをありがとう。私はこれを他のさまざまなウェブサイトからまとめて管理していましたが、それをチェックするのは良いことです。 – user589195

+1

JNIの全体については、「The Java™Native インターフェイスプログラマーズガイドと仕様」で説明しています。 http://java.sun.com/docs/books/jniからダウンロードできます。私はこのことからJNIの全知識を得ました。 – wpaulus

関連する問題