• JNIjw02


    1、VC6(CPP)的DLL代码:

    #include<stdio.h>
    #include "jniZ_JNIjw02.h"
    
    JNIEXPORT void JNICALL Java_jniZ_JNIjw02_TestZ (JNIEnv * env, jobject obj)
    {
        printf("Java_jniZ_JNIjw02_TestZ - 1
    ");
    
        // ∵ TestZ() 不是静态函数,∴传进来的就是调用这个函数的对象.
        // 否则就传入一个jclass对象表示native方法所在的类
        jclass jni02_clazz = env->GetObjectClass(obj);
        jfieldID fieldID_prop = env->GetFieldID(jni02_clazz, "propertyZ", "I");
        jmethodID methodID_func = env->GetMethodID(jni02_clazz, "FunctionZ", "(ILjava/util/Date;[I)I");
        env->CallIntMethod(obj, methodID_func, 0L, NULL, NULL); // invoke !
        
        printf("Java_jniZ_JNIjw02_TestZ - 2
    ");
    }

    2、Java代码:

    package jniZ;
    
    import java.util.Date;
    
    public class JNIjw02
    {
        public int propertyZ;
        public int FunctionZ(int _foo, Date _date, int[] _arr)
        {
            System.out.println("FunctionZ");
            return 0;
        }
        public native void TestZ();
        
        public static void main(String[] args)
        {
            System.loadLibrary("JNIjwVC6_02");  
            JNIjw02 jni02 = new JNIjw02();  
            jni02.TestZ();
            
    /*
    ZC: 为什么打印的顺序是这样的? :
    FunctionZ
    Java_jniZ_JNIjw02_TestZ - 1
    Java_jniZ_JNIjw02_TestZ - 2
    ZC: 个人觉得应该是这样啊 :
    Java_jniZ_JNIjw02_TestZ - 1
    FunctionZ
    Java_jniZ_JNIjw02_TestZ - 2
    */
        }
    }

    3、Java控制台输出:

    FunctionZ
    Java_jniZ_JNIjw02_TestZ - 1
    Java_jniZ_JNIjw02_TestZ - 2

    4、

    5、

  • 相关阅读:
    JavaScript语言和jQuery技术1
    JSP2
    JavaScript语言和jQuery技术2
    MYSQL2
    JSP1
    JSP5
    JSP3
    Spring框架
    JSP4
    MYSQL3(查询)
  • 原文地址:https://www.cnblogs.com/javaskill/p/5435614.html
Copyright © 2020-2023  润新知