c – 调用java方法
发布时间:2020-12-16 07:25:53 所属栏目:百科 来源:网络整理
导读:我今天用 Android SDK用Java创建了我的第一个原生调用. 我找到了一些例子但是与功能头部不一致. 我一直用 JNIEXPORT void JNICALL Java_com_test_Calculator_calcFileSha1 (JNIEnv *,jclass,jstring); 但我见过 JNIEXPORT void JNICALL Java_com_test_Calcul
我今天用
Android SDK用Java创建了我的第一个原生调用.
我找到了一些例子但是与功能头部不一致. 我一直用 JNIEXPORT void JNICALL Java_com_test_Calculator_calcFileSha1 (JNIEnv *,jclass,jstring); 但我见过 JNIEXPORT void JNICALL Java_com_test_Calculator_calcFileSha1 (JNIEnv *,jobject,jstring); 属于头部不同的是获得来电者的等级. 从C代码我想调用一个java方法.我找到了JNI文档(Calling Instance Methods). 我试图给出我从调用本机方法获得的类实例,该实例方法因AbstractMethodError而失败. 修复源代码: public class TestCalc extends Activity { static { System.loadLibrary("Test"); } private void setFilesize(long size) { } } 本地图书馆: // header #ifdef __cplusplus extern "C" { #endif JNIEXPORT void JNICALL Java_com_test_TestCalc_calcFilesize (JNIEnv *,jstring); void setFilesize(const INT_64 size); #ifdef __cplusplus } #endif #endif // code JNIEnv * callEnv; jobject callObj; JNIEXPORT void JNICALL Java_com_test_SHA1Calc_calcFileSha1 (JNIEnv * env,jobject jobj,jstring file) { callEnv = env; callObj = jobj; [...] } void setFilesize(const INT_64 size) { jmethodID mid; jclass cls; cls=callEnv->FindClass("com/test/TestCalc"); mid=callEnv->GetMethodID(cls,"setFilesize","(J)V"); if (mid == 0) { __android_log_print(ANDROID_LOG_DEBUG,DEBUG_TAG,"NDK:LC: [%s]","Cannot find method setFilesize"); return; } callEnv->ExceptionClear(); callEnv->CallVoidMethod(callObj,mid,size); if(callEnv->ExceptionOccurred()) { callEnv->ExceptionDescribe(); callEnv->ExceptionClear(); } } 感谢您的任何建议. 解决方法
调用[type]方法仅适用于私有方法和构造函数. (
Calling Instance Methods)当你拨打公共方法时,你会得到一个
AbstractMethodError.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |