如何使用jni将java中的Arraylist转换为c中的lpwstr 我使用JNI传递一个数组到C++。我想将其转换为LPWSTR*类型。但我收到的arraylist是jobject。我怎样才能转换它呢?

如何使用jni将java中的Arraylist转换为c中的lpwstr 我使用JNI传递一个数组到C++。我想将其转换为LPWSTR*类型。但我收到的arraylist是jobject。我怎样才能转换它呢?,java,c++,arraylist,java-native-interface,Java,C++,Arraylist,Java Native Interface,让我们开始吧。我不确定其中的一些转换,希望其他人能有所帮助 你有一个目标。获取JNI的方法并调用它们。很简单 下面的代码示例可能有助于入门 // parameter jobject YourJObjectRepresentingArrayList; // I suppose you have the JNIEnv somehow JNIEnv* env; // use the Array list ArrayList_class = env->FindClass( "jav

让我们开始吧。我不确定其中的一些转换,希望其他人能有所帮助

你有一个目标。获取JNI的方法并调用它们。很简单

下面的代码示例可能有助于入门

// parameter
jobject YourJObjectRepresentingArrayList;

// I suppose you have the JNIEnv somehow
JNIEnv* env;

// use the Array list
ArrayList_class       = env->FindClass( "java/util/ArrayList" );

    // to conver jobject to jstring
    jmethodID caster = env->GetMethodID(ArrayList_class, "toString", "()Ljava/lang/String;");

// get two methods
Get_method            = env->GetMethodID( ArrayList_class, "get", "(I)Ljava/lang/Object" );
Size_method           = env->GetMethodID( ArrayList_class, "size", "()I" );

// call java.lang.ArrayList.get()
int NumElts = env->CallIntMethod(YourJObjectRepresentingArrayList, ArrayList_class, Size_method);

// allocate output array
LPWSTR* Out = new LPWSTR[NumElts];

// fetch all the items
for(int i = 0 ; i < NumElts ; i++)
{
    // call java.lang.ArrayList.get(int index) method
    // Not sure about the parameter passing here
    jobject Tmp = env->CallObjectMethod(YourJObjectRepresentingArrayList, Get_method, i);

    jstring Str = (jstring)env->CallObjectMethod(Tmp, caster);

    // get the length
    int StrLen = env->GetStringLength(env, Str);

    Out[i] = new wchar_t[StrLen];

    const char* SourceUTF = env->GetStringChars(env, Str);

    // store the string - not sure about UTF-16/UTF-8 here. It is OS-dependant.
    // MultiByteToWideChar or iconv on POSIX
    ConvertUTF8ToWChar(Out[i], SourceUTF);

    env->ReleaseStringUTFChars(s, SourceUTF);
}

// done
//参数
jobject您的JobjectRepresentingArrayList;
//我想你一定有JNINEV
JNIEnv*env;
//使用数组列表
ArrayList_class=env->FindClass(“java/util/ArrayList”);
//将jobject转换为jstring
jmethodID caster=env->GetMethodID(ArrayList_类,“toString”,“()Ljava/lang/String;”;
//得到两种方法
Get_method=env->GetMethodID(ArrayList_类,“Get”,“I)Ljava/lang/Object”);
Size_method=env->GetMethodID(ArrayList_类,“Size”,“()I”);
//调用java.lang.ArrayList.get()
int numels=env->CallIntMethod(YourJObjectRepresentingArrayList、ArrayList\u类、Size\u方法);
//分配输出数组
LPWSTR*Out=新的LPWSTR[Numels];
//取回所有物品
for(int i=0;iCallObjectMethod(您的JobjectRepresentingArrayList,Get_method,i);
jstringstr=(jstring)env->CallObjectMethod(Tmp,caster);
//了解长度
int StrLen=env->GetStringLength(env,Str);
Out[i]=新的wchar_t[StrLen];
const char*SourceUTF=env->GetStringChars(env,Str);
//存储字符串-此处不确定UTF-16/UTF-8。它取决于操作系统。
//POSIX上的MultiByteToWideChar或iconv
ConvertUTF8ToWChar(Out[i],SourceUTF);
环境->释放StringUTFChars(s、SourceUTF);
}
//完成

ArrayList是什么?串?您希望如何将它们转换为LPWSTR?我是说,逻辑上。如果您真的想将其转换为LPWSTR*,请参阅上面Victor Latypov的评论。如果您的意思是LPWSTR**(字符串数组指针),那么只需将ArrayList转换为标准字符串数组(字符串[])即可。我想把它转换成LPWSTR*。如果我在ARAYLIST中有3个字符串,在C++中,我希望它具有3个值,作为LpWSTR数组或LpWSTR*