我想使用JNI(Java本地接口)來調用特定的java setter方法,並將短的[]緩衝區作爲參數傳遞給它。如何使用JNI從C調用JAVA方法C
Java方法執行力度如下所示:
public void setPcmLeft(short[] data) { pcm_l = data; }
從我的C函數裏面我怎麼能叫使用JNI此方法。
我的代碼目前看起來是這樣的:
void Java_com_companyName_lame_LameActivity_lameDecode(JNIEnv *env, jobject jobj)
{
jclass class = (*env)->GetObjectClass(env, jobj);
if (class != NULL) {
jmethodID setLeftDatatID = (*env)->GetMethodID(env, class, "<setPcmLeft>", "void(V)");
if (setLeftDatatID == NULL) {
LOGD("(Lame) No method setLeftData");
}
}
}
當我運行這一點,setLeftDataID
是allays NULL
。
請注意,jobj
參數是我傳入的對象,其中包含setPcmLeft
實現。
非常感謝Andy的工作。 – Sabobin 2013-05-13 20:33:50
我們什麼時候需要尖括號?我看到這樣的代碼'jmethodID m_mid = env - > GetMethodID(m_cls,「」,「()V」); ' –
smwikipedia
2014-12-05 15:11:24
@smwikipedia - 您需要使用特殊名稱'',其中'GetMethodID()'支持允許引用構造函數。 *「要獲得構造函數的方法ID,請提供作爲方法名稱,void(V)作爲返回類型。」* - 來自http://docs.oracle.com中'GetMethodID()'的文檔/javase/6/docs/technotes/guides/jni/spec/functions.html。 –
2014-12-05 16:14:43