通过JNI将.c文件中的字符串数组传递给java dll

use*_*195 1 c c# java java-native-interface interop

我试图让C#在我的java程序中实现一个类.我有一些更简单的例子,但是我遇到了我的java类将字符串数组作为构造函数的问题.

我的问题是如何在.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;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,请告诉我.

亲切的问候

小智 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);
Run Code Online (Sandbox Code Playgroud)