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(&parameter[sizeof(long01)], &double01, sizeof(double01));
memcpy(&parameter[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类型的参数)_参数的传递方式的更多相关文章

  1. JNI_Z_05_方法的操作(没有String类型的参数)

    1.步骤: (1).获取 jclass (2).获取 method的id (3).调用 method ZC: 貌似 JNI里面 操作 类的方法,完全是 无视 访问权限的... 然而 static的方法 ...

  2. JNI_Z_06_方法的操作(没有String类型的参数)_父类的同名方法

    1.关键在于: 使用的 method id 是 子类的 还是 父类的,而 父类methodID的获取 必须使用 父类的class对象. 2.VC6(CPP)的DLL代码: #include<st ...

  3. C# 通过ServiceStack 操作Redis——String类型的使用及示例

    1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...

  4. 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式

    今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...

  5. String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类

    1:String类型 #include <iostream> using namespace std; int main() { //初始化方法 string s1 = "hel ...

  6. JNI_Z_04_属性的操作(非String类型的属性)

    1.步骤 : (1).获取 jclass (2).获取 类属性字段的id(最后一个参数是 属性字段 的签名) (3).获取/设置 类属性字段的值 ZC: 貌似 JNI里面 操作 类属性字段,完全是 无 ...

  7. java中Object转换成int或String类型方法

    转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof ...

  8. C++标准库string类型

    string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作.标准库string类型的目的就是满足对字符串的一般应用. 本文地址:http://www.cn ...

  9. Spring MVC--------处理方法返回值的可选类型

    对于Spring MVC处理方法支持支持一系列的返回方式:  (1)ModelAndView (2)Model (3)ModelMap (4)Map (5)View (6)String (7)Void ...

随机推荐

  1. Spoken English Practice(appetite,ache,meds,change, stop)Look like you got your appetite back, that's a good sign.

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/6/27) ...

  2. Button 自动换行

    UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 300)]; view ...

  3. java获取当前路径&读取当前目录下文件

    项目目录如下: test1.class中读取test.txt import java.io.*; import java.util.Scanner; public class Test1 { publ ...

  4. 去除MyEclipse 中新建servlet多余的注释问题

    1.找到你的MyEclipse 的安装目录 2.点击文件位置,找到安装目录下的Common 文件夹下的plugins 3.找到com.genuitec.eclipse.wizards.jar  文件, ...

  5. 【TensorFlow】tf.nn.conv2d是怎样实现卷积的?

    tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, fil ...

  6. StrobeMediaPlayback的Javascript桥接

    StrobeMediaPlayback是Adobe官方出的流媒体播放器,支持RTMP协议,在项目中运用到了,却在网上怎么都找不到相关资料,可以说是寥寥无几. 无奈之下,稍微看了点源代码,对播放器与JS ...

  7. unix 全缓冲、行缓冲、无缓冲

    基于流的操作最终会调用read或者write函数进行I/O操作.为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O库函数的次数. 基于流的I/O提供以下3种缓冲: 全 缓冲:直到缓 ...

  8. 解决hash冲突的办法

    1.开发定址法 2.再哈希法 3.链地址法 4.建立一个公共溢出区

  9. Python 中全局变量的实现

    一.概述 Python 中全局变量的使用场景不多,但偶尔也有用武之处. 如在函数中的初始化,有时需要从外部传入一个全局变量加以控制.或者在函数中,使用连接池时,也可能有使用全局变量的需要. 广义上的全 ...

  10. HDU - 6430 Problem E. TeaTree 2018 Multi-University Training Contest 10 (LCA+枚举因子)

    题意:一棵树,每个点都有自己val(1 <= val <= 1e5),而任意两个点u,v可以对lca(u,v) 产生gcd(valu,valv)的贡献,求每个点能接受到来自子树贡献的最大值 ...