JNI_Z_07_方法的操作(没有String类型的参数)_参数的传递方式
1、
2、VC6(CPP)的DLL代码:
#include<stdio.h>
#include "jniZ_TjniMethod02.h" JNIEXPORT void JNICALL Java_jniZ_TjniMethod02_NativeFunc(JNIEnv * env, jobject obj)
{
jclass clazz = env->GetObjectClass(obj); jmethodID methodId01 = env->GetMethodID(clazz, "Func", "(JD)V"); // jlong 对应的本地类型是 __int64,如果下面直接传值2的话 变量的长度就不对了
env->CallVoidMethod(obj, methodId01, (jlong), 3.3); // *** // 1、第一种参数传递方式
jmethodID methodId02 = env->GetMethodID(clazz, "Func", "(JDC)V");
env->CallVoidMethod(obj, methodId02, (jlong), 3.3, L'Z'); // 2、第二种参数传递方式
int iLen = sizeof(jlong) + sizeof(jdouble) + sizeof(jchar);
jlong long01 = ;
jdouble double01 = 3.3;
jchar char01 = L'Z'; va_list parameter = new char[iLen];
memcpy(parameter, &long01, sizeof(long01));
memcpy(¶meter[sizeof(long01)], &double01, sizeof(double01));
memcpy(¶meter[sizeof(long01)+sizeof(double01)], &char01, sizeof(char01));
env->CallVoidMethodV(obj, methodId02, parameter); // ZC: 注意这里有一个字母"V"
delete[] parameter; // 释放堆内存 // 3、第三种参数传递方式
jvalue* args = new jvalue[];
args[].j = (jlong);
args[].d = 3.3;
args[].c = L'Z';
env->CallVoidMethodA(obj, methodId02, args); // ZC: 注意这里有一个字母"A"
delete[] args; // 释放指针堆内存
}
3、Java代码:
package jniZ; public class TjniMethod02
{
public void Func(long _long, double _d)
{
System.out.println("_long : "+_long);
System.out.println("_d : "+_d);
System.out.println();
} public void Func(long _long, double _d, char _c)
{
System.out.println("_long : "+_long);
System.out.println("_d : "+_d);
System.out.println("_c : "+_c);
System.out.println();
} public native void NativeFunc(); public static void main(String[] args)
{
System.loadLibrary("JniMethod02_VC6");
TjniMethod02 jniZ = new TjniMethod02();
jniZ.NativeFunc();
}
}
4、Java控制台输出:
_long : 2
_d : 3.3 _long : 1
_d : 3.3
_c : Z _long : 1
_d : 3.3
_c : Z _long : 1
_d : 3.3
_c : Z
5、
JNI_Z_07_方法的操作(没有String类型的参数)_参数的传递方式的更多相关文章
- JNI_Z_05_方法的操作(没有String类型的参数)
1.步骤: (1).获取 jclass (2).获取 method的id (3).调用 method ZC: 貌似 JNI里面 操作 类的方法,完全是 无视 访问权限的... 然而 static的方法 ...
- JNI_Z_06_方法的操作(没有String类型的参数)_父类的同名方法
1.关键在于: 使用的 method id 是 子类的 还是 父类的,而 父类methodID的获取 必须使用 父类的class对象. 2.VC6(CPP)的DLL代码: #include<st ...
- C# 通过ServiceStack 操作Redis——String类型的使用及示例
1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...
- 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...
- String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类
1:String类型 #include <iostream> using namespace std; int main() { //初始化方法 string s1 = "hel ...
- JNI_Z_04_属性的操作(非String类型的属性)
1.步骤 : (1).获取 jclass (2).获取 类属性字段的id(最后一个参数是 属性字段 的签名) (3).获取/设置 类属性字段的值 ZC: 貌似 JNI里面 操作 类属性字段,完全是 无 ...
- java中Object转换成int或String类型方法
转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof ...
- C++标准库string类型
string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作.标准库string类型的目的就是满足对字符串的一般应用. 本文地址:http://www.cn ...
- Spring MVC--------处理方法返回值的可选类型
对于Spring MVC处理方法支持支持一系列的返回方式: (1)ModelAndView (2)Model (3)ModelMap (4)Map (5)View (6)String (7)Void ...
随机推荐
- 【JS】JS中对于this的理解
一.对this的产生原因分析和了解 第一:this指的是函数运行时所在的环境(即调用的对象). 第二:JavaScript 语言之所以有this的设计,跟内存里面的数据结构有关系(内存存储详细理解参考 ...
- canvas基本使用
1.什么是CANVAS canvas是html5新增的画布元素,可以通过javascript来在画布上绘制图形,图标以及任何视觉性的图像. 2.canvas的用途 替代flash,做各种动态效果,做小 ...
- thinkphp5, 隐藏index.php
tp5官网手册里的代码有误, 注意防坑, 正确的应该是: 修改.htaccess文件: <IfModule mod_rewrite.c> Options +FollowSymlinks R ...
- ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ’1′ for key
当我用SQLyog尝试修改已有记录的mysql数据表的主键为自动增长时,报出以下错误 ALTER TABLE causes auto_increment resequencing, resulting ...
- Django之html-模板继承
在编程的过程中,我们经常会重复性的写了很多的代码,比如一个页面的框架部分,这样我又多少个页面就得写上多少次,这样既不好维护,也不够高效,所以我们引出了html的模板继承部分. 1.写好一个html文件 ...
- 列表(List) 的增删改查及其他方法
一.列表的简介 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...
- tomcat 日志目录 介绍
[root@mysql tomcat]# ll 总用量 drwxr-x---. root root 11月 : bin -rw-r-----. root root 11月 : BUILDING.txt ...
- 认识与学习BASH(下)
1.设定数组的变量与内容:var[index]=content,数组的读取:建议直接以$(数组)的方式来读取 例:echo“${var[1]},${var[2]},${var[3]}” 2.变量内容的 ...
- Taking a screen shot of a window using Delphi code is rather easy.
Taking a screen shot of a window using Delphi code is rather easy. A screen shot (screen capture) is ...
- 【工具】PC端调试手机端 Html 页面的工具
一.概述 有一个项目需要在手机端显示一个 web 页面,而每次把应用 launch 后,从手机端看比较麻烦,因此搜罗了几种在 PC 端调试手机端页面的工具. 二.工具 http://fonkie.it ...