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、