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\n");

    SYSTEMTIME systime;        //保存时间的结构体
    GetLocalTime(&systime);    //本地时间
//    printf("今天是:");
//    printf("%d年%d月%d日\n",systime.wYear,systime.wMonth,systime.wDay);
//    printf("现在时间是:");
    printf("==> %d:%d:%d:%d\n",systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
//    printf("星期:%d\n\n",systime.wDayOfWeek);
//    GetSystemTime(&systime);    //系统时间
//    printf("现在时间是:");
//    printf("%d:%d:%d:%d\n",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\n", number);

    // 修改number的值为100,这里要注意的是jint对应C++是long型 ∴后面要加一个"L"
    env->SetIntField(obj, id_number, 100L);

    printf("Java_jniZ_JNIjw03_SayHello - 2\n");
}

 

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、

 

posted @ 2016-04-26 16:34  JavaSkill  阅读(185)  评论(0编辑  收藏  举报