線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:996
推到 Plurk!
推到 Facebook!

有關jni的問題

答題得分者是:neoart
georgebig1
一般會員


發表:5
回覆:5
積分:2
註冊:2004-07-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-25 02:13:50 IP:61.64.xxx.xxx 未訂閱
下列程式我用BCB寫了一段jni的程式,java呼叫GetProcessList(),然後回傳AnsiString變數abc,卻出現錯誤訊息說"Cannot convert AnsiString to jstring",abc的型態設成String也不行,請大家教教我,到底是什麼問題,謝謝大家!! #include #pragma hdrstop #include "Unit2.h" #include "tlhelp32.h" #include "psapi.h" #include #include "ProcessList.h" //------------------------------------------------------------------- #pragma package(smart_init) //------------------------------------------------------------------- JNIEXPORT jstring JNICALL Java_ProcessList_GetProcessList(JNIEnv *, jobject, jstring) { AnsiString abc; abc = "Hello!!"; return abc; } 發表人 - taishyang 於 2004/08/25 14:18:00
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-25 04:44:23 IP:211.76.xxx.xxx 未訂閱
為什麼不直接使用 
JNIEXPORT jstring JNICALL
Java_ProcessList_GetProcessList(JNIEnv *, jobject, jstring)
{
  jstring abc;      abc = "Hello!!";
  return abc;
}
因為我沒用過 jstring 由 BCB5 的 include 目錄也找不到什麼相關資料, 不過您應該可以試試:
JNIEXPORT jstring JNICALL
Java_ProcessList_GetProcessList(JNIEnv *, jobject, jstring)
{
  AnsiString abc;      abc = "Hello!!";
  return jstring(abc);
}
基本上,此函式的回傳值型態要是 jstring 而您原程式回的是 AnsiString 自然會有類似的 compile 錯誤。所以,只需要想辨法讓回傳的型態是 jstring 即可。 視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/08/25 04:59:28
------
http://www.ViewMove.com
georgebig1
一般會員


發表:5
回覆:5
積分:2
註冊:2004-07-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-25 14:18:25 IP:61.64.xxx.xxx 未訂閱
謝謝你,基本上不是這個問題 你可以到java.sun多了解一下jni的用法, jni的傳值是照我那樣寫的沒錯, 而非一般函式傳值的方法, 例如使用jni語法時,回傳值設jint但函式中的回傳值型態則為一般int 下列是正確的一個例子 JNIEXPORT jint JNICALL Java_Memory_MemoryCount(JNIEnv *env, jobject obj) { int vm; vm = 1000; return vm; }
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-25 19:35:19 IP:61.56.xxx.xxx 未訂閱
歹勢,打擾一下.這是jni規格的問題.
Java_ProcessList_GetProcessList(JNIEnv *env, jobject jboj, jstring jstr){
  .....
  jboolean iscopy;
  char _destStr[80]="abc";
  return env->GetStringUTFChars(_destStr,&iscopy);
}
參考: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html -------------------------------------------------------------------------- 風聲雨聲Codding聲,聲聲入耳 國事家事USER事,事事關心 發表人 - neoart 於 2004/08/25 19:36:19
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-25 20:04:53 IP:61.56.xxx.xxx 未訂閱
版主: 小弟在此自請處分, 本題已在java版給分了,請將點數收回.
系統時間:2024-04-29 3:10:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!