2011-06-28 55 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

相关问题