JNI调用C和C++存在的区别

2023-05-16

  1.  JNI是由C语言定义接口的,JNI通过函数名找函数入口,执行函数里的内容。这和函数用什么语言生成的并没有关系。只要保证函数名称符合JNI的协议。而使用C++要注意的是C++默认生成的函数名称和你写在源文件中的名称并不相同,因为C++要处理函数重载,会在函数名称中加上参数信息,这称为name mangling。解决方法是定义函数时在前面加上extern "C"修饰,告诉编译器这函数要被C调用(当然,其实是JNI)。本质没有什么区别,一个是JNI调C,一个是JNI调C,C再掉C++,这样理解就简单了~
  2. 在C的定义中,env是一个两级指针,而在C++的定义中,env是个一级指针。C形式需要对env指针进行双重deferencing,而且须将env作为第一个参数传给jni函数,举个简单的例子:
eg:
  • 对于XXX.c:JNI 函数调用由“(*env)->”作前缀,目的是为了取出函数指针所引用的值。
    return (*env)->NewStringUTF(env,"HelloJNI!");  
  • 对于XXX.cpp:JNIEnv 类拥有处理函数指针查找的内联成员函数。
    return env->NewStringUTF("HelloJNI!"); 
  • 可以发现,C或者C++的实现很类似,但是它们对env的操作方式有所不同,因此使用C和C++来实现同一个JNI方法,它们的区别主要集中在对env的操作上,其他都是类似的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JNI调用C和C++存在的区别 的相关文章

  • dataframe指定位置插入行

    1 loc 函数可以定位行后 xff0c 并直接赋值插入 如下可见loc函数对直接改变原来行的值 df 61 pd DataFrame 39 动物 39 39 狗 39 39 猫 39 39 兔 39 39 数量 39 3 4 6 prin
  • Linux系统备份与还原

    Linux系统备份与还原 1 整盘备份与还原 1 1 记住几个这里要经常用到操作1 2 整盘克隆的方法 2 推荐 非整盘克隆的方法 2 1 备份系统2 2 还原系统 1 整盘备份与还原 1 1 记住几个这里要经常用到操作 查看存储设备 xf
  • VS2013如何添加LIb库及头文件的步骤

    在VS工程中 xff0c 添加c c 43 43 工程中外部头文件及库的基本步骤 xff1a 1 添加工程的头文件目录 xff1a 工程 属性 配置属性 c c 43 43 常规 附加包含目录 xff1a 加上头文件存放目录 2 添加文件引
  • composer.json和composer.lock到底是什么以及区别?

    composer方文档 xff1a https docs phpcomposer com 04 schema html 我们在做项目的时候 xff0c 总是要安装一些依赖 composer给我们提供了很多方便 直接运行composer in
  • VUE npm run build的项目出现跨域请求的问题npm run dev没有这个问题

    报错信息 Access to XMLHttpRequest at 39 http platformapi test lih elearning cn api v1 login 39 from origin 39 http www vue c
  • PHP message:filesize(): stat failed for 错误

    PHP message filesize stat failed for 错误 message filesize stat failed for F s2017 SinaImgUpload SinaImgUpload bin Debug T
  • PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现

    随着在线攻击的增多 xff0c 密码安全越来越重要 作为开发者我们要担负起安全管理 计算哈希和存储用户密码的责任 xff0c 不管应用是简单的游戏还是绝密商业文件的仓库 xff0c 都要做到这一点 PHP内置了一些工具 xff0c 让保护密
  • python 列表中的数字转为字符串

    1 list1 61 1 2 3 4 5 list1 61 str x for x in list1 2 list1 61 1 2 3 4 5 list1 61 list map str list1 转载于 https www cnblog
  • 恩尼格码的发明和破解

    恩尼格码是二战德军所采用的电子加密机械 其基本组成可以分为三部分 xff1a 键盘 xff0c 转子和显示器 键盘一共具有26个键 xff0c 类似于今天的计算机键盘 xff08 显示起见 xff0c 省略为6个 xff09 转子实际上有3
  • 得力D991CN Plus计算器评测(全程对比卡西欧fx-991CN X)

    得力在2018年出了一款高仿卡西欧fx 991CN X中文版的计算器 xff0c 型号为D991CN Plus xff0c 在实现同样功能的前提下 xff0c 网销价格是卡西欧的三分之一左右 但是这款计算器与卡西欧正版计算器差距是大是小 x
  • 网络机顶盒固件提取、编辑和打包

    提取的话 xff0c 这边有一篇文章可能有用https www znds com tv 649509 1 1 html 首先下载下载来的固件一般是img格式的 xff0c 可以到hdpfans com这个连接下载一个androidTool的
  • 从微软官网下载VisualStudio离线包

    首先要下载VS安装器 xff0c 有社区版 专业版 企业版 xff0c 此处以社区版为例 不同版本的VS xff0c 只需要将cmd命令中exe名称换掉就行了 仅C VisualStudioSetup exe layout D Layout
  • 基于STM32之UART串口通信协议(一)详解

    一 前言 1 简介 写的这篇博客 xff0c 是为了简单讲解一下UART通信协议 xff0c 以及UART能够实现的一些功能 xff0c 还有有关使用STM32CubeMX来配置芯片的一些操作 xff0c 在后面我会以我使用的STM32F4
  • Java内存分配及值、引用的传递

    关于堆栈的内容网上已经有很多资料了 xff0c 这是我找的加上自己理解的一篇说明文 xff1a 一 内存区域类型 1 寄存器 xff1a 最快的存储区 由编译器根据需求进行分配 我们在程序中无法控制 xff1b 2 栈 xff1a 存放基本
  • NEMA-0183(GPRMC GPGGA)详细解释

    NEMA 0183 GPRMC GPGGA 详细解释 nmea数据如下 xff1a GPGGA 121252 000 3937 3032 N 11611 6046 E 1 05 2 0 45 9 M 5 7 M 0000 77 GPRMC
  • [转]printf 函数实现的深入剖析

    研究printf的实现 xff0c 首先来看看printf函数的函数体 int printf const char fmt int i char buf 256 va list arg 61 va list char amp fmt 43
  • http_parser

    最近读了 http parser 的源码 xff0c 记录下 有意思的地方 xff1a 1 协议解析可以不完全解析完 xff0c 但是当前 parser 会记录解析状态 xff0c 这样可以继续解析 2 协议解析首要还是要了解协议本身 xf
  • linux 网络编程 3---(io多路复用,tcp并发)

    1 xff0c io模型 xff1a 阻塞io 非阻塞io io多路复用 xff0c 信号驱动io 阻塞Io与非阻塞io的转换 xff0c 可用fcntl 函数 include lt unistd h gt include lt fcntl
  • 计算机网络socket实验报告,计算机网络socket编程实验报告

    计算机网络socket编程实验报告 由会员分享 xff0c 可在线阅读 xff0c 更多相关 计算机网络socket编程实验报告 4页珍藏版 请在人人文库网上搜索 1 实课程名称实验项目名称实验时间 日期及节次 专业年级姓名验计算机科学与技
  • linux 内核重定位,linux内核netfilter实现url重定向

    include include 34 url redirect h 34 struct sk buff tcp newpack u32 saddr u32 daddr u16 sport u16 dport u32 seq u32 ack

随机推荐

  • can/socket can

    1 概念 参考 xff1a Linux CAN编程详解 can引脚 xff1a cn2 15 xff1a CAN1 H 19 CAN1 L 根据每组报文开头的 11 位标识符 扩展帧为29位标识符 CAN 2 0A 规范 解释数据的含义来决
  • C#不能在匿名方法、lambda表达式、查询表达式或本地函数中使用ref、Out或in参数

    报错信息 Error CS1628 C 不能在匿名方法 lambda表达式 查询表达式或本地函数中使用ref Out或in参数 Error CS1628 Cannot use ref out or in parameter xx insid
  • STL 智能指针

    转自 xff1a https blog csdn net k346k346 article details 81478223 STL一共给我们提供了四种智能指针 xff1a auto ptr unique ptr shared ptr和we
  • 【转】目前最常见的”无线通信(数据)传输技术“有哪些?

    近年来 xff0c 随着电子技术 计算机技术的发展 xff0c 无线通信技术蓬勃发展 xff0c 出现了各种标准的无线数据传输标准 xff0c 它们各有其优缺点和不同的应用场合 xff0c 本文将目前应用的 无线通信种类进行了分析对比 xf
  • 认证 (authentication) 和授权 (authorization) 的区别

    以前一直分不清 authentication 和 authorization xff0c 其实很简单 xff0c 举个例子来说 xff1a 你要登机 xff0c 你需要出示你的 passport 和 ticket xff0c passpor
  • stm32f407VE+enc28j60+lwip2.0.2

    407自带以太网mac模块 xff0c 一般外挂一个PHY芯片就可以实现以太网物理层 xff1b 以下是stm32f407VE 43 enc28j60 43 lwip2 0 2实现最基本的以太网通信功能 1 新建工程 xff0c 此处省略1
  • 关于步进电机的半流设置、衰减设置

    连接 xff1a https zhidao baidu com question 1668040896278315667 html 电流是电机运行的载体 xff0c 但电压的高低也直接影响到电流 xff0c 很多人使用步进电机存在误区 xf
  • 三十二、http与www服务介绍

    一 用户访问百度 xff08 www baidu com xff09 用户访问在url中输入地址后 xff0c 首先会访问本地的缓存和hosts文件 xff0c 如果没有 xff0c 会访问本地DNS xff0c 在就是根域和顶级域名等 x
  • UNIX网络编程卷1 - >环境搭建(ubuntu16.04)

    学习unp网络编程 xff0c 树上的例子均存在 include unp h xff0c 故需要对环境进行配置 1 到资源页下载 www unpbook com 2 解压并将unpv13e移动到相应的文件夹下 因为我是在windows电脑装
  • HTTP认证之基本认证——Basic(二)

    导航 HTTP认证之基本认证 Basic xff08 一 xff09 HTTP认证之基本认证 Basic xff08 二 xff09 HTTP认证之摘要认证 Digest xff08 一 xff09 HTTP认证之摘要认证 Digest x
  • 超声波雾化模块_超声波加湿器让果蔬保持新鲜

    水果和蔬菜的保鲜对于超市和餐饮业来说非常重要 保持蔬菜的新鲜度一直令人头疼 xff0c 因为蔬菜和水果的新鲜度直接影响客户的购买 因此 xff0c 为了有效地延长蔬菜水果的保鲜期 xff0c 喷洒蔬菜水果 xff0c 延长其保鲜期很重要 目
  • Visual Studio 内置宏的查看与使用

    C 43 43 工程 C 43 43 工程是最容易查看宏的 因为很多值的编辑 xff0c 都提供了宏的查看 C 工程 C 的工程 xff0c 不容易查看宏 因为很少提供宏的查看窗口 所以 xff0c 我这里给出总结就有必要了 NET Fra
  • STM32-OLED屏幕显示教程

    目录 1 OLED屏幕介绍 2 OLED屏幕显示一个点的思路 3 配置OLED屏幕 4 OLED显示字符串 5 OLED屏幕显示汉字 6 OLED屏幕显示图片 7 总结 我的上篇文章已经介绍过IIC协议 xff08 本篇文章不对IIC协议做
  • 394. Decode String

    题目 Total Accepted 10087Total Submissions 25510Difficulty MediumContributors Admin Given an encoded string return it 39 s
  • (4)STM32使用HAL库实现串口通讯——理论讲解

    一 查询模式 1 二 中断模式 1 中断接收 1 1先看中断接收的流程 xff08 以 USART2 为例 xff09 在启动文件中找到中断向量 USART2 IRQHandler 找到USART2 IRQHandler的函数定义 可以看到
  • 对于同样的文件,为什么每次tar生成的文件的md5sum值不一致呢?

    tar cvf 每次md5都一样 gzip 每次md5都一样 tar zcvf 为什么每次就不一样了呢 xff1f 因为这个过程分两步 xff1a 1 生成 file tar xff08 注意中间过程生成的这个文件的时间 xff09 2 压
  • Linux内核修改串口缓冲区,关于linux串口,定时器与缓存的问题分析与解决

    In non canonical input processing mode input is not assembled into lines and input processing erase kill delete etc does
  • java https 实现_java实现https,https接口请求

    https 接口 39 安全证书管理器 public class MyX509TrustManager implements X509TrustManager 64 Override public void checkClientTrust
  • [解决]BCD注册表错误

    需要调整启动项 xff0c 在windows平台推荐使用easyBCD 安装后运行 xff0c 弹出 xff1a 错误的BCD注册表 The boot configuration data store could not be opened
  • JNI调用C和C++存在的区别

    JNI是由C语言定义接口的 xff0c JNI通过函数名找函数入口 xff0c 执行函数里的内容 这和函数用什么语言生成的并没有关系 只要保证函数名称符合JNI的协议 而使用C 43 43 要注意的是C 43 43 默认生成的函数名称和你写