javah在eclipse中设置参数:location(javah.exe的位置)working dir(${project_loc}/src)

-classpath .;./classes -d ${project_loc}\jni -jni ${java_type_name}

回调的java代码

public class HelloWorld {
static {
System.loadLibrary("jnidemo");
} public void myCallbackFunc(String nMsg) {
Log.v("EagleTag", "back message:" + nMsg);
} private void throwException() throws NullPointerException {
throw new NullPointerException("Null pointer");
} public native String DisplayHello(String inputStr);
}

C代码

jstring JNICALL Java_com_example_jnidemo_HelloWorld_DisplayHello(JNIEnv *env,
jobject obj, jstring what) {
const jbyte *l_what;
char *result; l_what = (*env)->GetStringUTFChars(env, what, NULL);
if (l_what == NULL) {
return NULL; /* OutOfMemoryError already thrown */
} result = malloc(strlen(l_what) + );
if (result == NULL) {
return NULL;
}
sprintf(result, "中文reiver %s", l_what); //回调
char tChar[];
gJniClass = ;
gJinMethod = ; gJniClass = (*env)->GetObjectClass(env, obj);
if (gJniClass == || gJniClass == NULL)
return (*env)->NewStringUTF(env, "-1"); gJinMethod = (*env)->GetMethodID(env, gJniClass, "myCallbackFunc",
"(Ljava/lang/String;)V");
if (gJinMethod == || gJinMethod == NULL)
return (*env)->NewStringUTF(env, "-2"); strcpy(tChar, result);
(*env)->CallVoidMethod(env, obj, gJinMethod,
(*env)->NewStringUTF(env, tChar)); return (*env)->NewStringUTF(env, result);
}

JNI 回调小记的更多相关文章

  1. JNI通过线程c回调java层的函数

    1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...

  2. NDK(20)JNI的5大性能缺陷及优化技巧

    转自 : http://www.ibm.com/developerworks/cn/java/j-jni/index.html JNI 编程缺陷可以分为两类: 性能:代码能执行所设计的功能,但运行缓慢 ...

  3. NDK(22)JNI编程如何避免常见缺陷

    转自 : http://www.ibm.com/developerworks/cn/java/j-jni/index.html 避免常见缺陷 假设您编写了一些新 JNI 代码,或者继承了别处的某些 J ...

  4. JNI 多线程

    一.概述 JNI编程和Linux上的C/C++编程还是挺相似的,每次java调用JNI中的函数时都会传入有关JVM的一些参数(如JNIEnv,jobject),每次JNI回调java中的方法时都要通过 ...

  5. 谷歌广告Admob在cocos2dx上通过回调实现底部Banner

    首先说明我的开发平台,以免由于平台问题造成不必要的误解: cocos2dx-3.4 ndk-r9d eclipse Admob是谷歌官方广告,已经集成在google_play_service_lib包 ...

  6. 解决JNI native 线程不能正常退出的问题

    本人刚涉足学习C++ 安卓  java,遇到这个棘手的问题,多谢博客园作者lknlfy 看了你的博客解决了这个问题,此文转发, 方便日后学习 以下内容转自lknlfy作者博客  传送门:http:// ...

  7. Jni 线程JNIEnv,JavaVM,JNI_OnLoad(GetEnv返回NULL?FindClass返回NULL?)

    此文章是关于NDK线程的第二篇理论知识笔记.主要有两个点,如下: 1.pthread_create(Too many arguements, expected 1) ?2.线程中如何获取JNIEnv? ...

  8. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  9. Android NDK开发----- JNI多线程

    一.概述 JNI编程和Linux上的C/C++编程还是挺相似的,每次java调用JNI中的函数时都会传入有关JVM的一些参数(如JNIEnv,jobject),每次JNI回调java中的方法时都要通过 ...

随机推荐

  1. js实例代码

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. POJ1043问题描述

    Description The FBI is conducting a surveillance of a known criminal hideout which serves as a commu ...

  3. 在Xcode6.1.1模拟器中点击UITextView不出现软键盘?

    使用Xcode6.1.1做一个小项目时,在storyboard中添加了一个UITextField,使用模拟器运行后,点击UITextField出现光标,也可以从外接键盘上输入文字,但是就是不出现软键盘 ...

  4. [转载]Oracle修改表空间大小

    Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...

  5. JavaScript实现,判断一个点是否在多边形内

    //定义点的结构体 function point(){ this.x=0; this.y=0; } //计算一个点是否在多边形里,参数:点,多边形数组 function PointInPoly(pt, ...

  6. NSTimer 线程操作

    http://www.jianshu.com/p/0c050af6c5ee 2.NSTimer的创建与撤销必须在同一个线程操作.performSelector的创建与撤销必须在同一个线程操作.

  7. ios9 升级后 企业版app plist无法安装

    昨天apple推送了ios9, 公司的一些app是企业版的,平常通过 item-service 结果更改如下 plist可以了 itms-services://?action=download-man ...

  8. 主机OS重装的节点加回RAC集群步骤示例(11gR2 RAC)

    原文地址: https://blogs.oracle.com/Database4CN/entry/%E4%B8%BB%E6%9C%BAos%E9%87%8D%E8%A3%85%E7%9A%84%E8% ...

  9. NSNotificationCenter

    - (void)viewDidLoad { [super viewDidLoad]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCust ...

  10. 正确导入android-support-v4.jar的方法

    在导入使用了ViewPage,ActionBar,Fragment的工程后出现错误,很有可能是没有导入4.0版本的支持包. 首先在Project->properties->Java Bui ...