专栏首页李蔚蓬的专栏Tip | JNI数据类型与指针嵌套

Tip | JNI数据类型与指针嵌套

JNI数据类型

  • Java Type Java数据类型
  • Native Type Native层的数据类型
  • Description 描述符

JNI里面的常量池

JNI中的一些变量和函数

JNI中的一些函数:

像图中的CallObjectMethod()CallIntMethod()等这里写的这些方法其实只是一个调用而已,

这些方法在NDK的工具集里面已经实现好了;

JNIEnv

//JNIEnv结构体的指针别名
typedef struct MYJNINativeInterface_* JNIEnv;

JNIEnv就是JNI获取Java对象、Java变量的一个上下文环境:

模仿JNI写的一段程序【指针嵌套】

#include <stdlib.h>
#include <stdio.h>

//JNIEnv结构体的指针别名
typedef struct MYJNINativeInterface_* JNIEnv;

//结构体
struct MYJNINativeInterface_
{
    //函数声明
    char* (*NewStringUTF)(JNIEnv*,char*);
};

//函数实现
char* NewStringUTF(JNIEnv* env, char* str){
    //在NewStringUTF执行过程,仍然需要JNIEnv
    return str;
}

//JNIEnv  就是一级结构体指针
//JNIEnv* 则是二级结构体指针
void main(){
    //实例化结构体
    struct MYJNINativeInterface_ struct_env;
    struct_env.NewStringUTF = NewStringUTF;//!!!!!!!!!!

    //结构体指针
    JNIEnv e = &struct_env;

    //结构体的二级指针
    JNIEnv *env = &e;

    //通过二级指针调用函数;(*env)则是一级结构体指针
    char* str = (*env)->NewStringUTF(env, "test");
    printf("%s", str);
    system("pause");

}

  • 在使用jni的时候, 我们就是跟这案例一样,使用(*env) -> 函数名的形式, 来调用jni、NDK中准备好的函数的;

关于this

  • this在Java中是指调用者本身的一个实例, 而在jni中,传的this则是struct _JNIEnv的上下文, 即传的就是上例中说道的一级结构体指针

则使用JNI时候,便可以有这样的写法:


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RFID课程前置——SQL巩固练习

    -- 5) 输出所有数据的拨号流水,并且在最后一行添加总呼叫时长。 -- 记录呼叫员编号、对方号码、通话时长 --... -- 汇总[市内号码总时长][长...

    凌川江雪
  • 一个关于R包报错的tip

    凌川江雪
  • PHP笔记 | 异常处理

    凌川江雪
  • 对Spark的那些【魔改】

    这两年做streamingpro时,不可避免的需要对Spark做大量的增强。就如同我之前吐槽的,Spark大量使用了new进行对象的创建,导致里面的实现基本没有...

    用户2936994
  • 聊聊微服务集群当中的自动化工具

    本篇博客主要介绍了自动化工具这个概念,在微服务集群当中的作用,算抛砖引玉,欢迎大家提出自己的见解。

    SH的全栈笔记
  • 数组特性的妙用!如何找到「缺失的第一个正数」

    今天分享的题目来源于 LeetCode 第 41 号问题:缺失的第一个正数。题目难度为 Hard。本文使用了一个比较 Trick 的解法。

    五分钟学算法
  • 关联规则挖掘综述

    本文介绍了关联规则挖掘的研究情况,提出了关联规则的分类方法,对一些典型算法进行了分析和评价,指出传统关联规则衡量标准的不足,归纳出关联规则的价值衡量方法,展望了...

    机器学习AI算法工程
  • 网站安全检测中具体渗透测试方法

    越来越多的网站以及app手机端客户注重安全渗透测试服务,上线前必须要对平台进行全面的预渗透测试找出安全漏洞以及BUG,很多客户找我们SINE安全,做渗透测试服务...

    技术分享达人
  • 最全的网站渗透测试详细检测方法

    有授权的情况下直接使用 nmap 、masscan 、自己写py脚本等端口扫描工具直接获取开放的端口和获取服务端的 banner 信息。

    IT大咖说
  • .net连接MySQL的方法

    最近要用C#做一个东西,连接之前项目的数据库(用MySQL建的)。.net连接MySQL实现起来其实并不是很复杂的事,网上找找,方法挺多的,下面将我实现的方法简...

    跟着阿笨一起玩NET

扫码关注云+社区

领取腾讯云代金券