如何使用jni将java中的Arraylist转换为c中的lpwstr 我使用JNI传递一个数组到C++。我想将其转换为LPWSTR*类型。但我收到的arraylist是jobject。我怎样才能转换它呢?
让我们开始吧。我不确定其中的一些转换,希望其他人能有所帮助 你有一个目标。获取JNI的方法并调用它们。很简单 下面的代码示例可能有助于入门如何使用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
// 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*