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 ...
随机推荐
- 160704、commons-beanutils.jar常用方法
package com.test.beanutils; import java.lang.reflect.InvocationTargetException;import java.text.Pars ...
- 诡异的js
[] + {}; 隐式转换后,是0 那 {} + []呢? var a = 42,b; b = ( a++, a);
- 决策树ID3算法python实现 -- 《机器学习实战》
from math import log import numpy as np import matplotlib.pyplot as plt import operator #计算给定数据集的香农熵 ...
- 17.Recflection_反射
www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
- Java 其他对象的 API
System 类 (java.lang 包下) 该类中的方法和属性都是静态的. 常见方法 // 1, 获取当前时间的毫秒值 long currentTimeMillis(); // 2, 获取系统的属 ...
- Linux一键安装web环境全攻略(阿里云ECS服务器)
摘自阿里云服务器官网,此处 一键安装包下载: 点此下载 安装须知 1.此安装包可在阿里云所有linux系统上部署安装,此安装包包含的软件及版本为: nginx:1.0.15.1.2.5.1.4.4 a ...
- s5_day4作业
# #流程控制练习题: # #==========>基础部分 # #练习一: # if True or False and False: # print('yes') # else: # pri ...
- 数据结构&算法(一)_堆、栈(堆栈)、队列、链表
堆: ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树.将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做 ...
- 08 Spring框架 AOP (一)
首先我们先来介绍一下AOP: AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的 ...
- hibernatetemplate find条件查询方法
一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有Use ...