通过JNI将字符串数组从.c文件传递到javadll

本文关键字:文件 javadll JNI 字符串 数组 通过 | 更新日期: 2023-09-27 18:00:30

我试图让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;
}

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

向致以诚挚的问候

灰分

通过JNI将字符串数组从.c文件传递到javadll

  • 首先创建字符串数组
  • 创建每个元素字符串
  • 使用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);