当前位置: 首页 > news >正文

郑州做网站建设哪家好青岛做外贸网站

郑州做网站建设哪家好,青岛做外贸网站,广告做图网站,wordpress上传算流量吗JNI的两种注册机制:静态注册和动态注册. 一、JNI介绍 JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C机型交互. 方式: 静态注册动态注册:需要提供Java中…

JNI的两种注册机制:静态注册和动态注册.

一、JNI介绍

JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native
语言的一种特性。通过JNI可以使得Java与C/C++机型交互.

方式

  • 静态注册
  • 动态注册:需要提供Java中Native方法的方法签名和Native层中对应的实现函数。

二、静态注册

要求C/C++层的函数名符合某种特定的要求:包含Java中Native方法的目录信息和方法名。

Example
Java

package cn.com.codingce.ndkpractice;public native String stringFromJNI();

C++

extern "C"
JNIEXPORT jstring JNICALL
Java_cn_com_codingce_ndkpractice_MainActivity_stringFromJNI(JNIEnv *env, jobject thiz) {std::string hello = "Hello from C++";//crashTest();return env->NewStringUTF(hello.c_str());
}

按照以上规则进行命名,在调用到Native的方法时,JVM会去查找是否存在对应函数名的函数,以此实现静态注册。

三、动态注册

动态注册相对于静态注册,优点是不再根据特定路径查找函数的实现,带来两个好处:

  • 没有了冗杂的函数名,适用于大型项目开发。
  • 由于不再根据Native函数查找对应的JNI层函数,所以首次调用速度比静态注册快。

开发者需要自行提供Java层和C/C++层中的映射关系。
一种可行的方法是基于JNI重载JNI_OnLoad(),在其中对函数进行动态注册。

Example
Java

package cn.com.codingce.ndkpractice.utils;public static native void logInit(String logFilePath, String logName, int logfileLevel, int logScreenLevel);

C++

此步骤涉及到如何获取Java函数。

static JNINativeMethod nativeUtilsMethods[] = {{"logInit",  "(Ljava/lang/String;Ljava/lang/String;II)V", (void *) localLogInit},{"logJni",   "(ILjava/lang/String;)V",                    (void *) logJni},{"logClose", "()V",                                       (void *) logClose},
};static void nativeLogUtilsRegisterNatives(JNIEnv *jniEnv) {if (jniEnv == nullptr) {return;}jclass clazz = nullptr;do {clazz = jniEnv->FindClass("cn/com/codingce/ndkpractice/utils/LogUtils");if (clazz == nullptr) {diagnosis_assert(!"FindClass LogUtils error!");break;}if (jniEnv->RegisterNatives(clazz, nativeUtilsMethods,std::extent<decltype(nativeUtilsMethods)>::value) != 0) {diagnosis_assert(!"RegisterNatives error!");break;}} while (false);if (jniEnv->ExceptionCheck() == JNI_TRUE) {jniEnv->ExceptionClear();}if (clazz != nullptr) {jniEnv->DeleteLocalRef(clazz);}
}

重载JNI_OnLoad函数,并在其中调用nativeLogUtilsRegisterNatives函数

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {JNIEnv *jniEnv{nullptr};if (vm->GetEnv((void **) &jniEnv, JNI_VERSION_1_6) != JNI_OK) {diagnosis_assert(!"JNI version error!");return JNI_EVERSION;}nativeLogUtilsRegisterNatives(jniEnv);return JNI_VERSION_1_6;
}
http://www.yayakq.cn/news/70130/

相关文章:

  • 个人做房产网站网站产品 模块
  • 西昌有哪些做网站的公司商务网站建设需要多少钱
  • 网站开发源代码什么意思网站设置主网
  • 自己怎么免费做网站网页统一门户网站建设规范
  • 自助免费网站建设平台网站优化排名网站
  • wordpress网站示例支付建设网站的费用什么科目
  • 个人建站平台移动互联网时代欧莱雅全渠道营销模式研究
  • 合肥网站开发爱站网权重查询
  • 昆明做网站哪家公司好百度 网站描述
  • 英文网站建设 淮安网站开发大致需要哪些步骤
  • 怎么自己制作网站免费文山做网站yunling88
  • 做网站的开发软件是什么如何做好网站建设销售
  • 做网站卖什么产品利润高文化传媒 网站设计
  • 织梦php网站模板免费做网站的方法
  • 培训班在哪个网站找网站和网业的关系
  • 南翔企业网站开发建设幸运28网站建设
  • 南山做网站公司有哪些页面升级紧急通知
  • 保定市建设施工许可证查询网站百度高搜
  • 教育培训东莞网站建设网页设计实验
  • 做一个销售网站需要多少钱少儿编程培训哪个机构好
  • 热e国产-网站正在建设中-手机版互联网建设与管理
  • 星月教你做网站的文档wordpress文章没缩略图
  • 文网站建设费用计入什么科目镇海住房和建设交通局网站
  • 什么网站专做外贸网站域名需icp备案
  • 美食网站开发步骤百度seo技术优化
  • 毕设做网站怎么命题长春网站建设公司十佳
  • 公司内部 网站开发企业网站必备模块
  • 涟水县住房和城乡建设局网站做网站流量优化都是什么
  • 电子商务网站建设和管理的含义主题网站设计与制作
  • 企业网站建设应具备的功能金昌市网站建设