Java笔记-JNI中简单的参数与返回值处理
目录
基本概念
代码及演示
基本概念
此篇博文记录了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中简单的参数与返回值处理相关推荐
- libsvm中svmtrain的参数和返回值
对svmtrain函数的输入参数和返回值进行说明 1. 训练 libsvm函数用于对训练集的数据进行训练,得到训练好的模型. model = libsvmtrain(training_label_ve ...
- python中result函数用法_python中函数的参数和返回值
函数 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形式 ...
- C语言学习笔记---结构体作为函数参数和返回值
结构体不仅可以作为函数的参数传递,也可以作为函数的返回值.现在就分别来看一下这两种情况. 结构体作为参数 struct score {int chinese;int math;int englis ...
- typescript(四)ts中函数的参数和返回值的类型定义
前面我们讲到过ts的静态类型定义中的函数类型定义,先来回顾下: const fnA: () => string = () => { return '1' } const fnB: () = ...
- Java笔记-JNI中Java与C语言解决中文乱码问题
目录 基本概念 演示过程 基本概念 这里我把他总结成4个步骤: 1. 找类,Java的String: 2. 找函数String类的方法,成员函数: 3. 设置要转换的字符和编码: 4. 程序生成编码后 ...
- Java笔记-Spring-rabbitmq中设置receiveMessage参数为Message
如下代码: public void receiveMessage(Message message){............ } 其中对应的Message为此包: import org.springf ...
- python3 中方法各种参数和返回值
# -*- coding:utf-8 -*- # Author: Evan Mi# 函数def func1():print('in the func1')return 0# 过程def func2() ...
- Lambda表达式有参数有返回值的练习
package com.learn.demo05.Lambda;import java.lang.reflect.Array; import java.util.Arrays; import java ...
- Java笔记(学习中。。)
Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...
最新文章
- 机器学习中算法的性能评估
- 从零开始山寨Caffe·拾:IO系统(三)
- python3 socket shutdown 简介
- 《C++标准程序库》笔记之二
- 在乌班图中将py3设置为默认解释器
- python中可变参数怎么传递的呢_在python中,你可以在命名参数后传递可变参数吗?...
- 实验吧之【Forms、天网管理系统】
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
- ROS入门 SLAM
- 利用钩子技术控制进程创建(附源代码)
- MacOS入门技巧分享
- javascript高级程序设计pdf_JavaScript八张思维导图
- kubernetes视频教程笔记 (30)-安全-鉴权Authorization
- 借阅书籍python_pythonMongoDB爬取图书馆借阅记录
- 前端下载图片(文件)以及打包下载图片(文件)
- c# NPOI 导出Excel 冻结窗格
- 获取ie窗口的IHTMLDocument2对象
- mysql弱口令字典_自制弱口令字典top100
- 直线一级倒立摆数学建模与控制仿真
- 在代码中实现对各进程内存的监控