• JNIjw03


    1、VC6(CPP)的DLL代码:

    #include<stdio.h>
    #include "jniZ_JNIjw03.h"
    
    JNIEXPORT void JNICALL Java_jniZ_JNIjw03_SayHello (JNIEnv * env, jobject obj)
    {
        printf("Java_jniZ_JNIjw03_SayHello - 1
    ");
    
        SYSTEMTIME systime;        //保存时间的结构体
        GetLocalTime(&systime);    //本地时间
    //    printf("今天是:");
    //    printf("%d年%d月%d日
    ",systime.wYear,systime.wMonth,systime.wDay);
    //    printf("现在时间是:");
        printf("==> %d:%d:%d:%d
    ",systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
    //    printf("星期:%d
    
    ",systime.wDayOfWeek);
    //    GetSystemTime(&systime);    //系统时间
    //    printf("现在时间是:");
    //    printf("%d:%d:%d:%d
    ",systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
        
    
        // 获取obj中对象的class对象
        jclass clazz = env->GetObjectClass(obj);
    
        // 获取Java中的number字段的id(最后一个参数是 属性number 的签名)
        jfieldID id_number = env->GetFieldID(clazz, "number", "I");
    
        // 获取number的值
        jint number = env->GetIntField(obj, id_number);
    
        // 输出到控制台
        printf("In C++ number : %d
    ", number);
    
        // 修改number的值为100,这里要注意的是jint对应C++是long型 ∴后面要加一个"L"
        env->SetIntField(obj, id_number, 100L);
    
        printf("Java_jniZ_JNIjw03_SayHello - 2
    ");
    }

    2、Java代码:

    package jniZ;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class JNIjw03
    {
        public int number = 0;//定义一个属性
    
        //定义一个本地方法
        public native void SayHello();
        
        public static void main(String[] args)
        {
            //调用动态链接库
            System.loadLibrary("JNIjwVC6_03");
            JNIjw03 jni03 = new JNIjw03();
            jni03.SayHello();
            System.out.println("In Java number : "+jni03.number);
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");//设置日期格式
            System.out.println("--> "+df.format(new Date()));// new Date()为获取当前系统时间
    /*
    ZC: 控制台输出:
    In Java number : 100
    Java_jniZ_JNIjw03_SayHello - 1
    In C++ number : 0
    Java_jniZ_JNIjw03_SayHello - 2
    ZC: 总感觉,这个 java的输出 和 C++的输出 的顺序,比较诡异...
     */
        }
    }

    3、Java控制台输出:

    In Java number : 100
    --> 2016-04-26 17:03:00.043
    Java_jniZ_JNIjw03_SayHello - 1
    ==> 17:3:0:23
    In C++ number : 0
    Java_jniZ_JNIjw03_SayHello - 2

    4、

    5、

  • 相关阅读:
    python 多线程测试
    python 多线程join()
    python 多线程 t.setDaemon(True):
    线程锁
    python 多线程
    模板渲染和参数传递.
    求两个数组的交集
    java数组并集/交集/差集(补集)
    java各种集合的线程安全
    页面跳转和重定向
  • 原文地址:https://www.cnblogs.com/javaskill/p/5435621.html
Copyright © 2020-2023  润新知