设为首页 加入收藏

TOP

[ndk,2]ndk开发案例和错误处理(五)
2014-11-23 21:12:37 来源: 作者: 【 】 浏览:20
Tags:ndk 开发 案例 错误 处理

return result;

}

//C调用java中参数为string的方法

public voidprintString(String s){

System.out.println("我是java方法"+s);

}

}

2、c代码的方法:

①、调用java中的helloFromJava()方法

//obj 代表的是调用这个c代码的java对象

JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod2

(JNIEnv * env , jobject obj) {

//获取字节码

jclass jclazz =

(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");

// jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);

//如果一个java方法是 静态的 就必须通过 GetStaticMethodID

//获取方法的id

jmethodIDjvoidmethod =

(*env)->GetMethodID(env,jclazz,"helloFromJava","()V");

//必须在这个地方 创建出来 dataprovider的对象

// jobject (*AllocObject)(JNIEnv*, jclass);

//创建java中dataprovider类的对象

jobject dpobj =(*env)->AllocObject(env,jclazz);

//调用方法:

(*env)->CallVoidMethod(env,dpobj,jvoidmethod);

}

②、调用java中Add(int x,int y)方法:

JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod3

(JNIEnv * env , jobject obj) {

jclass jclazz =

(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");

jmethodID jintmethod =(*env)->GetMethodID(env,jclazz,"Add","(II)I");

jobject dpobj =(*env)->AllocObject(env,jclazz);

// jint (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);

//调用带有int类型返回值的方法:

intresult =(*env)->CallIntMethod(env,dpobj,jintmethod,3,5);

LOGI("c resutl=%d",result);

}

③、调用java中printString(Strings)方法:

JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod4

(JNIEnv * env , jobject obj) {

jclass jclazz =

(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");

jmethodID jvoidmethod =

(*env)->GetMethodID(env,jclazz,"printString","(Ljava/lang/String;)V");

jobject dpobj =(*env)->AllocObject(env,jclazz);

(*env)->CallVoidMethod(env,dpobj,jvoidmethod,(*env)->NewStringUTF(env,"haha from c"));

}

十三 c代码调用java中的静态方法:

1、在类中定义一个静态方法:

public class DataProvider {

//静态方法

public static void hellofromstatic(){

System.out.println("我是静态方法");

}

}

2、c代码:

//obj 代表的是调用这个c代码的java对象

JNIEXPORT void JNICALLJava_cn_itcast_ndkcallback_DemoActivity_callMethod2

(JNIEnv * env , jobject obj) {

//获取类字节码

jclass jclazz =

(*env)->FindClass(env,"cn/itcast/ndkcallback/DataProvider");

// jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);

//如果一个java方法是 静态的 就必须通过 GetStaticMethodID

//获取静态方法id 使用GetStaticMethodID方法

jmethodID jvoidmethod =

(*env)->GetStaticMethodID(env,jclazz,"hellofromstatic","()V");

/// void (*CallStaticVoidMethod)(JNIEnv*,jclass, jmethodID, ...);

//执行静态方法

(*env)->CallStaticVoidMethod(env,jclazz,jvoidmethod);

}

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇BMP文件右旋90度[c语言] 下一篇寻找直方图中面积最大的矩形(C语..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: