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)2, 3.3);

    // ***

    // 1、第一种参数传递方式
    jmethodID methodId02 = env->GetMethodID(clazz, "Func", "(JDC)V");
    env->CallVoidMethod(obj, methodId02, (jlong)1, 3.3, L'Z');

    // 2、第二种参数传递方式
    int iLen = sizeof(jlong) + sizeof(jdouble) + sizeof(jchar);
    jlong long01 = 1;
    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[3];
    args[0].j = (jlong)1;
    args[1].d = 3.3;
    args[2].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、