2011-06-28 93 views
1

我試圖讓C#在我的java程序中實例化一個類。我有一些簡單的例子工作,但我碰到了問題,我的java類採用字符串數組作爲構造函數。通過JNI將.c文件中的字符串數組傳遞給java dll

我的問題是如何在.c文件中創建一個字符串數組,然後可以傳遞給java類?

在一分鐘我設法通過一個單一的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
  • 首先創建字符串的數組。
  • 創建每個元素字符串。
  • 使用數組對象調用Java初始化程序。

示例代碼:

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

相關問題