在 Java 中, 如果想要作一些高效率的工作,
那麼我的建議是要到 C++ 裡面寫 code, 然後用 Java 來呼叫.
在 Windows 裡面用 Unicode code 表示的字串, 你可以使用 TCHAR * 這種資料型態來儲存字串位址
使用 JNI 的方式可以讓我們的 Java 程式呼叫 C++ 的 function. 現在假設要傳入一個 Java 字串給 C++, 那要怎麼作?
如何將 Java 傳來的 jstring 轉成 TCHAR*
// in C++ code
JNIEXPORT jint JNICALL xxx_AudioRecord
(JNIEnv *env, jclass cls,jstring jstrAudioInputSource){
// 進行轉換的動作 (關鍵片段)
const jchar *strAudioInputSource=env->GetStringChars(jstrAudioInputSource, false);
MessageBox(NULL,(TCHAR *)strAudioInputSource,_T("Audio Info"),MB_OK);
// 呼叫 c++ function
int iret=(int)SelectAudioRecordDevice((TCHAR *)strAudioInputSource);
// 別忘了 release
env->ReleaseStringChars (jstrAudioInputSource, strAudioInputSource);
}
// C++ function
HRESULT SelectAudioRecordDevice(TCHAR *InputDeviceName){
...
}
如果是一般 jstring -> const char* 則怎麼作呢?
// in C function
JNIEXPORT jlong JNICALL xxxx(JNIEnv *env, jclass obj,jstring jurl,xxx){
// 轉換 jstring -> const char* (關鍵片段)
const char *url = (*env)->GetStringUTFChars(env, jurl, 0);
// 呼叫 C function, 處理高效率工作
cfunction(url);
// 最後別忘了釋放記憶體
(*env)->ReleaseStringUTFChars(env, jurl, url);
}
//C function
void cfunction(const char* url){
}
by Jing
沒有留言:
張貼留言