我想使用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