zoukankan      html  css  js  c++  java
  • 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、

  • 相关阅读:
    必知必会 | Android 性能优化的方面方面都在这儿
    上周热点回顾(1.19-1.25)团队
    上周热点回顾(1.12-1.18)团队
    如何在博客园的markdown编辑器中输入数学公式团队
    上周热点回顾(1.5-1.11)团队
    上周热点回顾(12.29-1.4)团队
    上周热点回顾(12.22-12.28)团队
    云计算之路-阿里云上-寒流来袭:2014年12月23日21:45-23:15网站故障团队
    上周热点回顾(12.15-12.21)团队
    【活动】加班一整年了,程序员们,你们还好吗?团队
  • 原文地址:https://www.cnblogs.com/javaskill/p/5435621.html
Copyright © 2011-2022 走看看