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、

  • 相关阅读:
    20155217 2016-2017-2《java程序设计》第一周学习总结
    20155217杨笛-安装虚拟机
    20155217-杨笛-c与java
    我所期望的师生关系
    jQ学习之实现全选全不选操作
    jQ学习之实现表格的隔行换色
    jQ学习之过滤选择器的测试
    jQ学习之层级选择器的测试
    jQ学习之基础选择器的测试
    jQ学习之实现图片的定时弹出
  • 原文地址:https://www.cnblogs.com/javaskill/p/5435621.html
Copyright © 2011-2022 走看看