第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將 Java ArryList<String> 傳遞給 JNI C 函數(shù)并在 C 中打印列表

將 Java ArryList<String> 傳遞給 JNI C 函數(shù)并在 C 中打印列表

Qyouu 2021-11-24 14:47:19
我在 Java 中有以下本機(jī)方法:public class ConsoleIO{    public native static void printList(List<String> list);   ......}與 JNI 對(duì)應(yīng)的 C 實(shí)現(xiàn)如下:JNIEXPORT void JNICALL Java_ConsoleIO_printList(JNIEnv *env, jclass cls, jobject obj){}現(xiàn)在我需要將一個(gè)字符串列表從 java 傳遞到 printList(List list) 方法,并從上面的 C 實(shí)現(xiàn)循環(huán)遍歷它,并從 C 函數(shù)在控制臺(tái)中打印它們。我知道這個(gè) List 類(lèi)型沒(méi)有 C 表示,但是我需要知道如何在 C 中訪(fǎng)問(wèn)這個(gè)字符串列表并在 C 本身中打印出來(lái)?
查看完整描述

2 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

我找到了解決方案:


JNIEXPORT void JNICALL Java_ConsoleIO_printList(JNIEnv *env, jclass cls, jobject obj)

{


    jclass listClass = (*env)->GetObjectClass(env,obj);


    jmethodID sizeMethod = (*env)->(env,listClass,"size","()I");

    jmethodID getMethod = (*env)->GetMethodID(env,listClass,"get","(I)Ljava/lang/Object");


    jint size =  (*env)->CallIntMethod(env,sizeMethod);



}


查看完整回答
反對(duì) 回復(fù) 2021-11-24
?
胡說(shuō)叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

Java 有類(lèi)型擦除。所以在編譯后的代碼中List<String>就變成List了。


因此,您真正要尋找的是使用 JNI 實(shí)現(xiàn)以下 Java 調(diào)用:


jint size = list.size();

for (jint i = 0; i < size; i++) {

    jobject elem = list.get(i);

    jstring str = (jstring)elem;

    ... print str ...

}

在上面的 C 代碼中,list.size()andlist.get()必須替換為對(duì)GetMethodID,CallIntMethod和 的調(diào)用CallObjectMethod??梢詓tr使用GetStringChars或檢索字符串GetStringUTFLength。并且需要一些內(nèi)存管理:ReleaseXXX.


查看完整回答
反對(duì) 回復(fù) 2021-11-24
  • 2 回答
  • 0 關(guān)注
  • 336 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)