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

建设网站哪个好网站栏目设置说明

建设网站哪个好,网站栏目设置说明,国家商标局,wordpress 720云文章目录 JNI中的JNIEXPORT、JNIIMPORT和JNICALLJVM如何查找native方法①按照JNI规范的命名规则②调用JNI提供的RegsterNatives函数,将本地函数注册到JVM中示例代码 JNI数据类型JNI字符串的处理①获取字符串②释放字符串③创建字符串④其他字符串处理API JNI中的JNI…

文章目录

  • JNI中的JNIEXPORT、JNIIMPORT和JNICALL
  • JVM如何查找native方法
    • ①按照JNI规范的命名规则
    • ②调用JNI提供的RegsterNatives函数,将本地函数注册到JVM中
    • 示例代码
  • JNI数据类型
  • JNI字符串的处理
    • ①获取字符串
    • ②释放字符串
    • ③创建字符串
    • ④其他字符串处理API

JNI中的JNIEXPORT、JNIIMPORT和JNICALL

两个关键字的定义都可以在jni_md.h下找到

均用于定义与平台相关的宏

用于标识函数用途

  • JNIEXPORT:(实则为C++规则)放置在函数、变量或对象的声明前面,指示编译器将其导出为动态链接库的一部分。这使得其他程序可以通过在运行时加载动态链接库并使用导出的函数、变量或对象
  • JNIIMPORT:(实则为C++规则)放置在函数、变量或对象的声明前面,指示编译器将其标记为从动态链接库中导入的符号
  • JNICALL:(实则为C++规则)一种标准的函数调用约定,也被称为 “标准调用”;具有以下性质:
    函数的参数按照从右到左的顺序依次入栈。这意味着最右边的参数首先被压入栈中。
    调用方清理栈上的参数。这意味着在函数调用结束后,由调用方负责从栈上移除函数的参数。
    函数的返回值通常存储在 EAX 寄存器中
//Windows下的定义
#define JNIEXPORT __declspec(dllexport)
#define JNIIMPORT __declspec(dllimport)
#define JNICALL __stacall//Linux下的定义(实际是空定义)
#define JNIEXPORT
#define JNIIMPORT
#define JNICALL

JVM如何查找native方法

①按照JNI规范的命名规则

即根据JNI所约定的命名规则来指定函数的命名,具体规则如下:Java_类全路径_方法名

JNIEXPORT jstring JNICALL Java_com_kqli_jni_JniTest_getStringFromC(JNIEnv *env, jclass jclass);
JNIEXPORT jstring JNICALL Jave_com_test_jni_HelloWord_func(JNIEnv* env, jclass class, jstring str);
  • 第一个jstring为返回值(string类型)
  • 函数名中com_kqli_jni_JniTest_getStringFromC,代表Java类com_kqli_jni_JniTest,getStringFromC代表具体的函数名称
    JNIEnv,指向JVM函数表的指针
  • jclass,调用Java中native方法的实例对象

②调用JNI提供的RegsterNatives函数,将本地函数注册到JVM中

//函数原型
jint RegisterNatives(JNIEnv *env, jclass clazz, const JNINativeMethod *methods, jint nMethods);
  • clazz:声明native方法的类
  • methods:JNINativeMethod结构的数组
typedef struct {char *name;	//java方法名称char *signature;//java方法签名void *fnPtr;//c/c++的函数指针
} JNINativeMethod;
  • nMethods:指定methods数组中的本地方法数,通常写法为
nMethods = sizeof(methods) / sizeof(JNINativeMethod);

示例代码

java

package com.test.jni;public class A{static{System.loadLibrary("A");	}public static native int a(String str);public static native boolean b();public static native int c(Object obj);public static void main(String[] args){......}
}

native

jint a(JNIEnv *env ,jclass class, jstring str){....
}jboolean b(JNIEnv *env ,jclass class){....
}jint c(JNIEnv *env ,jclass class, jobject obj){....
}static JNINativeMethod method_table[] = 
{{"a", "(Ljava/lang/String;)I", (void *)a},{"b", "()Z", (void *)b},{"c", "(Ljava/lang/Object;)I", (void *)c},
};jint JNI_OnLoad(JavaVM* vm, void* reserved)
{......jclass clz = env ->FindClass(JNIREG_CLASS);env ->RegisterNatives(clz, method_table, sizeof(method_table) / sizeof(JNINativeMethod));......
}

JNI数据类型

在这里插入图片描述

类: 例如String的签名为Ljava/lang/String; 注意: 包名和类名用/隔开, 结尾有一个;
数组:用[表示数组签名, 例如int[]的签名为[I

JNI字符串的处理

①获取字符串

JNI通过jstring来处理字符串数据,但是jstring是指向JVM内部的字符串,和C风格的字符串类型char * 不同,因此必须使用合适的JNI函数来访问JVM内部的字符串。
因为Java默认使用unicode编码,而C/C++默认使用UTF编码,所以要注意进行编码转换。

const char* GetStringUTFChars(jstring str, jbbolean *isCopy);
  • str为需要获取的字符串
  • isCopy取值JNI_TRUE和JNI_FALSE,一般填NULL即可
  • JNI_TRUE:返回JVM内部源字符串的拷贝,并为新产生的字符串分配内存空间
  • JNI_FALSE:返回JVM内部源字符串的指针,并可以指针修改源字符串的内容

②释放字符串

通过GetStringUTFChars获取到字符串并返回的为源字符串拷贝后,在使用完毕要记得释放内存。

void ReleaseStringUTFChars(jstring str, const char* utf);
  • str为需要释放的字符串指针
  • utf为字节编码

③创建字符串

jstring NewStringUTF(const char * bytes);
  • bytes为C/C++的字符串数据源

④其他字符串处理API

  • GetStringChars、ReleaseStringChars:用于获取/释放Unicode格式的字符串
  • GetStringUTFLength、GetStringLength:用于获取UTF-8/Unicode格式的字符串长度
  • GetStringCritical、ReleaseStringCritical:用于直接返回/释放源字符串的指针,获取这个指针会导致暂停GC线程,如果GC线程暂停时又被其他线程触发GC的话,会出现系统死锁的阻塞调用
  • GetStringUTFRegion、GetStringRegion:用于获取UTF-8/Unicode格式字符指定范围内的内容,并会将源字符串复制到一个预先分配的缓冲区内
http://www.yayakq.cn/news/946400/

相关文章:

  • 搭建电商网站php网站超市
  • 珠海网站建设联系方式wordpress word发布文章
  • 可以做全景的网站企业主页设计
  • 网站后台管理系统域名做盗市相关网站
  • 网站模板建设报价中国商标查询网官网
  • 建网站那个网最好凡科建站网站
  • 网站主页布局asp网站 上传空间
  • asp.net做电商网站页面苏州网站制作工作室
  • wordpress编辑页面上方有白条苏州优化网站排名
  • 找钢网网站建设展示系统 网站模板免费下载
  • 大厂做网站shijuewang请被人做网站
  • 公司网站推广现状cad精品课网站建设
  • 简约、时尚、高端 网站建设可以直接做室内su的网站
  • wordpress修改站点地址在线系统
  • 常州网站建设最易电子书资源wordpress主题
  • 建站代理加盟php网站开发什么
  • 长沙旅游网站制作app开发制作
  • 除了网页外 网站还需要wordpress html 代码编辑器
  • 常州溧阳建设工程管理中心网站h5网站建设模板
  • 信阳做网站买了个域名 如何自己做网站
  • 青海企业网站开发定制绍兴外贸网站建设
  • 宁波应用多的建站行业合肥网站建设卫来科技
  • 简单的网站设计图大连制作网站企业
  • 烟台房地产网站建设建设银行网站表单清理
  • 免费网站安全软件下载百度快速排名技术培训
  • c net做的网站开发公众号
  • h5软件制作工具app苏州seo营销
  • 中文域名到期对网站的影响河北省邢台市建设工程网站
  • c qq 互联网站开发代码凌云县 城市建设 网站
  • 营销型网站规划步骤摄影网站建设开题报告