简体   繁体   English

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

[英]Passing array of strings from .c file to java dll via JNI

I trying to get C# to instanciate a class in my java program.我试图让 C# 在我的 java 程序中实例化一个 class 。 I have had a number of simpler examples working but I've hit the problem that my java class takes a string array as the constructor.我有一些更简单的例子在工作,但我遇到了一个问题,即我的 java class 将字符串数组作为构造函数。

My question is how in a.c file do you create an string array that can then be passed through to the java class?我的问题是如何在 a.c 文件中创建一个字符串数组,然后将其传递给 java class?

At the minute I've managed to pass across a single jString object.此刻,我设法通过了一个 jString object。

Heres the method in my.c file.这是 my.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;
}

Please let me know if you need anymore information.如果您需要更多信息,请告诉我。

Kind Regards亲切的问候

Ash

  • First create the array of strings.首先创建字符串数组。
  • Create every Element String.创建每个元素字符串。
  • Call Java Initializer with Array object.使用数组 object 调用 Java 初始化程序。

Sample Code:示例代码:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM