目录

基本概念

代码及演示


基本概念

此篇博文记录了JNI的基本规范,与使用:

https://blog.csdn.net/qq78442761/article/details/94849374

在本篇不再说明,只说下简单参数和返回值。

官方对基础数据类型的解释如下:

看看代码里面的可以看到:

这些数据类型还是很想象的。

下面对这些传入和返回值作下演示。

代码及演示

使用javah -jni xxxx后生成.h文件,Windows上配置号VS的包含目录,IDEA配置好依赖后(在https://blog.csdn.net/qq78442761/article/details/94849374此博文有详细的说明),

Java运行截图如下:

源码如下:

main.java

public class Main {public native boolean booleanFun(boolean boolValue);public native byte byteFun(byte byteValue);public native char charFun(char charValue);public native short shortFun(short shortValue);public native int intFun(int intValue);public native long longFun(long longValue);public native float floatFun(float floatValue);public native double doubleFun(double doubleValue);public static void main(String[] args) {System.loadLibrary("JNIParamentAndReturn");Main mainTest = new Main();System.out.println("The result is : " + mainTest.booleanFun(true) + "\n");System.out.println("The result is : " + mainTest.byteFun((byte) 110) + "\n");System.out.println("The result is : " + mainTest.charFun('a') + "\n");System.out.println("The result is : " + mainTest.shortFun((short) 66) + "\n");System.out.println("The result is : " + mainTest.longFun( 666666) + "\n");System.out.println("The result is : " + mainTest.floatFun((float) 250.25) + "\n");System.out.println("The result is : " + mainTest.doubleFun( 11.1101) + "\n");System.out.println("The result is : " + mainTest.intFun(10086) + "\n");}
}

main.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Main */#ifndef _Included_Main
#define _Included_Main
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     Main* Method:    booleanFun* Signature: (Z)Z*/
JNIEXPORT jboolean JNICALL Java_Main_booleanFun(JNIEnv *, jobject, jboolean);/** Class:     Main* Method:    byteFun* Signature: (B)B*/
JNIEXPORT jbyte JNICALL Java_Main_byteFun(JNIEnv *, jobject, jbyte);/** Class:     Main* Method:    charFun* Signature: (C)C*/
JNIEXPORT jchar JNICALL Java_Main_charFun(JNIEnv *, jobject, jchar);/** Class:     Main* Method:    shortFun* Signature: (S)S*/
JNIEXPORT jshort JNICALL Java_Main_shortFun(JNIEnv *, jobject, jshort);/** Class:     Main* Method:    intFun* Signature: (I)I*/
JNIEXPORT jint JNICALL Java_Main_intFun(JNIEnv *, jobject, jint);/** Class:     Main* Method:    longFun* Signature: (J)J*/
JNIEXPORT jlong JNICALL Java_Main_longFun(JNIEnv *, jobject, jlong);/** Class:     Main* Method:    floatFun* Signature: (F)F*/
JNIEXPORT jfloat JNICALL Java_Main_floatFun(JNIEnv *, jobject, jfloat);/** Class:     Main* Method:    doubleFun* Signature: (D)D*/
JNIEXPORT jdouble JNICALL Java_Main_doubleFun(JNIEnv *, jobject, jdouble);#ifdef __cplusplus
}
#endif
#endif

main.cpp

#include "Main.h"
#include <iostream>
using namespace std;JNIEXPORT jboolean JNICALL Java_Main_booleanFun(JNIEnv *, jobject, jboolean jb)
{cout << "---------- C++ Java_Main_booleanFun start ----------" << endl;cout << "The parament is : " << boolalpha << (bool)jb << endl;bool retValue = false;cout << "---------- C++ Java_Main_booleanFun end   ----------" << endl;return retValue;
}JNIEXPORT jbyte JNICALL Java_Main_byteFun(JNIEnv *, jobject, jbyte jb)
{cout << "---------- C++ Java_Main_byteFun start ----------" << endl;cout << "The parament is : " << (int)jb << endl;signed char sc = 0x01;cout << "---------- C++ Java_Main_byteFun end   ----------" << endl;return sc;
}JNIEXPORT jchar JNICALL Java_Main_charFun(JNIEnv *, jobject, jchar jc)
{cout << "---------- C++ Java_Main_charFun start ----------" << endl;cout << "The parament is : " << jc << endl;unsigned short retValue = 'F';cout << "---------- C++ Java_Main_charFun end   ----------" << endl;return retValue;
}JNIEXPORT jshort JNICALL Java_Main_shortFun(JNIEnv *, jobject, jshort js)
{cout << "---------- C++ Java_Main_shortFun start ----------" << endl;cout << "The parament is : " << js << endl;short ret = 21;cout << "---------- C++ Java_Main_shortFun end   ----------" << endl;return ret;
}JNIEXPORT jint JNICALL Java_Main_intFun(JNIEnv *, jobject, jint ji)
{cout << "---------- C++ Java_Main_intFun start ----------" << endl;cout << "The parament is : " << ji << endl;int ret = 200;cout << "---------- C++ Java_Main_intFun end   ----------" << endl;return ret;
}JNIEXPORT jlong JNICALL Java_Main_longFun(JNIEnv *, jobject, jlong jl)
{cout << "---------- C++ Java_Main_longFun start ----------" << endl;cout << "The parament is : " << jl << endl;__int64 ret = 100;cout << "---------- C++ Java_Main_longFun end   ----------" << endl;return ret;
}JNIEXPORT jfloat JNICALL Java_Main_floatFun(JNIEnv *, jobject, jfloat jf)
{cout << "---------- C++ Java_Main_floatFun start ----------" << endl;cout << "The parament is : " << jf << endl;float ret = 100.001;cout << "---------- C++ Java_Main_floatFun end   ----------" << endl;return ret;
}JNIEXPORT jdouble JNICALL Java_Main_doubleFun(JNIEnv *, jobject, jdouble jd)
{cout << "---------- C++ Java_Main_doubleFun start ----------" << endl;cout << "The parament is : " << jd << endl;double ret = 200.00001;cout << "---------- C++ Java_Main_doubleFun end  ----------" << endl;return ret;
}

Java笔记-JNI中简单的参数与返回值处理相关推荐

  1. libsvm中svmtrain的参数和返回值

    对svmtrain函数的输入参数和返回值进行说明 1. 训练 libsvm函数用于对训练集的数据进行训练,得到训练好的模型. model = libsvmtrain(training_label_ve ...

  2. python中result函数用法_python中函数的参数和返回值

    函数 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形式 ...

  3. C语言学习笔记---结构体作为函数参数和返回值

      结构体不仅可以作为函数的参数传递,也可以作为函数的返回值.现在就分别来看一下这两种情况. 结构体作为参数 struct score {int chinese;int math;int englis ...

  4. typescript(四)ts中函数的参数和返回值的类型定义

    前面我们讲到过ts的静态类型定义中的函数类型定义,先来回顾下: const fnA: () => string = () => { return '1' } const fnB: () = ...

  5. Java笔记-JNI中Java与C语言解决中文乱码问题

    目录 基本概念 演示过程 基本概念 这里我把他总结成4个步骤: 1. 找类,Java的String: 2. 找函数String类的方法,成员函数: 3. 设置要转换的字符和编码: 4. 程序生成编码后 ...

  6. Java笔记-Spring-rabbitmq中设置receiveMessage参数为Message

    如下代码: public void receiveMessage(Message message){............ } 其中对应的Message为此包: import org.springf ...

  7. python3 中方法各种参数和返回值

    # -*- coding:utf-8 -*- # Author: Evan Mi# 函数def func1():print('in the func1')return 0# 过程def func2() ...

  8. Lambda表达式有参数有返回值的练习

    package com.learn.demo05.Lambda;import java.lang.reflect.Array; import java.util.Arrays; import java ...

  9. Java笔记(学习中。。)

    Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...

最新文章

  1. 机器学习中算法的性能评估
  2. 从零开始山寨Caffe·拾:IO系统(三)
  3. python3 socket shutdown 简介
  4. 《C++标准程序库》笔记之二
  5. 在乌班图中将py3设置为默认解释器
  6. python中可变参数怎么传递的呢_在python中,你可以在命名参数后传递可变参数吗?...
  7. 实验吧之【Forms、天网管理系统】
  8. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
  9. ROS入门 SLAM
  10. 利用钩子技术控制进程创建(附源代码)
  11. MacOS入门技巧分享
  12. javascript高级程序设计pdf_JavaScript八张思维导图
  13. kubernetes视频教程笔记 (30)-安全-鉴权Authorization
  14. 借阅书籍python_pythonMongoDB爬取图书馆借阅记录
  15. 前端下载图片(文件)以及打包下载图片(文件)
  16. c# NPOI 导出Excel 冻结窗格
  17. 获取ie窗口的IHTMLDocument2对象
  18. mysql弱口令字典_自制弱口令字典top100
  19. 直线一级倒立摆数学建模与控制仿真
  20. 在代码中实现对各进程内存的监控

热门文章

  1. DDD~DDD从零起步架构说明
  2. uva 465 - Overflow
  3. FreeEIM 小插件 dwzjzx v2.1001 2013 下载
  4. 如何隐藏win32 console application的console窗口
  5. {转载}非程序员的GNU Emacs使用心得
  6. 更改Web.config中对上传文件大小限制
  7. Visual C#设计多功能关机程序
  8. 云计算开发学习笔记:Python3迭代器与生成器
  9. 北妈是谁、谁是北妈?他为何如此帅?
  10. 第 1 节:前端面试指南 — 简历篇