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 ...
随机推荐
- ArcGIS runtime for wpf 部署
简介 ArcGIS runtime for wpf 是一个轻量级的产品,部署方便,甚至可以做到直接部署在U盘中,做到即插即用. 部署一般需要遵循如下几个步骤: 1. 设定部署许可 虽然ArcGIS r ...
- SQL 2005 分页存储过程
-- ============================================= -- Description: <高效分页存储过程,适用于Sql2005以上> -- ...
- mysql建立索引 删除索引
建立索引 1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE ...
- django的安装、文件解释与基本命令
1.安装 pip install django==1.9.8 2.新建一个django project django-admin startproject mysite #创建工程文件 cd mysi ...
- Linux启动应用(比如jmeter)报An error occurred: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
Linux启动应用(比如jmeter)报An error occurred: Can't connect to X11 window server using ':0.0' as the value ...
- SQL JOIN使用方法
(转自W3School相关教程:http://www.w3school.com.cn,W3School是不错的在线教程,简洁高效!) 下面列出不同的SQL JOIN类型,以及他们之间的差异: JOIN ...
- s5_day5作业
# 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成批量修改操作 # def number_file(file,change_s,change): # import os # with ...
- LeetCode:逆波兰表达式求值【150】
LeetCode:逆波兰表达式求值[150] 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除 ...
- tomcat 启动报错(tomcat org.apache.catalina.core.StandardContext startInternal)
转载:https://blog.csdn.net/chenlong316048157/article/details/18698611 org.apache.catalina.core.Standar ...
- maven入门学习(一)
一.maven介绍 1.软件开发中我们为什么要使用maven呢?(纯属个人体会观点,如有错误,敬请指正) (1)其一,企业岗位需求,目前的IT开发招聘岗位上,基本都要求会使用maven. ...