c++ 子线程里面调用 Android 代码
2017-09-06 17:28
344 查看
c++ 子线程里面调用 Android 代码
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:“抄袭“地址:http://adamish.com/blog/archives/327
我写的时候发现原来作者的代码有点小问题,稍稍修改了下
代码块
代码块语法遵循标准markdown代码,例如:package com.adamish; public class Foo { public native void register(); public void callback(int val) { // do stuff } }
// cached refs for later callbacks JavaVM * g_vm; jobject g_obj; jmethodID g_mid; JNIEXPORT jboolean JNICALL Java_com_adamish_Foo_register (JNIEnv * env, jobject obj, jlong hwnd) { bool returnValue = true; // convert local to global reference // (local will die after this method call) env->GetJavaVM(&g_vm); g_obj = env->NewGlobalRef(obj); // save refs for callback jclass g_clazz = env->GetObjectClass(g_obj); if (g_clazz == NULL) { std::cout << "Failed to find class" << std::endl; } g_mid = env->GetMethodID(g_clazz, "callback", "(I)V"); if (g_mid == NULL) { std::cout << "Unable to get method ref" << std::endl; } return (jboolean)returnValue; }
void callback(int val) { JNIEnv * g_env; // double check its all ok int getEnvStat = g_vm->GetEnv((void **)&g_env, JNI_VERSION_1_6); if (getEnvStat == JNI_EDETACHED) { std::cout << "GetEnv: not attached" << std::endl; if(g_vm->AttachCurrentThread(&g_env,NULL)!=0){ std::cout << "Failed to attach" << std::endl; } } else if (getEnvStat == JNI_OK) { // } else if (getEnvStat == JNI_EVERSION) { std::cout << "GetEnv: version not supported" << std::endl; } g_env->CallVoidMethod(g_obj, g_mid, val); if (g_env->ExceptionCheck()) { g_env->ExceptionDescribe(); } g_vm->DetachCurrentThread(); }
相关文章推荐
- android中如何通过jni调用c,c++代码
- Android代码调用C++代码和C++代码调用Android代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- [转][android][利用JNI技术在Android中调用、调试C++代码]
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- android 中 c++ 调用java代码(1)
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 利用JNI技术在Android中调用C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android JNI简单实例(android 调用C/C++代码)
- android 中 c++ 调用java代码(2)
- 【Android学习笔记】如何使用Eclipse在Android项目中调用C/C++代码,及遇到的错误解决方法
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- android 中 c++调用java代码(3)
- Android JNI简单实例(android 调用C/C++代码)
- Android JNI简单实例(android 调用C/C++代码)
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码