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、
JNIjw03的更多相关文章
随机推荐
- git 学习(一)初始化和提交
git 学习(一) 创建git版本库 $ mkdir gitstudy $ cd gitstudy $ git init nitialized empty Git repository in /Use ...
- mysql 数据库表名大小写问题
lower_case_table_names=1 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /usr/my.cnf: ...
- C++ 动态内存 栈堆
C++ 动态内存_w3cschool https://www.w3cschool.cn/cpp/cpp-dynamic-memory.html
- [译转]深入理解LayoutInflater.inflate()
原文链接:https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/ 译文连接:http://bl ...
- dplyr快速入门
RStudio Blog 介绍dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等函数进一步分离强化, 专注接受dataframe对象, 大 ...
- C语言高级宏技巧
特殊符号#.## (1)# When you put a # before an argument in a preprocessor macro, the preprocessor turns t ...
- s5_day14作业
import re # 1. 匹配一段文本中的每行的邮箱 # ret=re.findall('\w+@\w+\.com','10000@qq.com,qwe48645313@163.com') # p ...
- Java Web专题
- LightOJ - 1138 (二分+阶乘分解)
题意:求阶乘尾部有Q(1 ≤ Q ≤ 108)个0的最小N 分析:如果给出N,然后求N!尾部0的个数的话,直接对N除5分解即可(因为尾部0肯定是由5*2构成,那么而在阶乘种,2的因子个数要比5少,所以 ...
- 使用sqoop把mysql数据导入hive
使用sqoop把mysql数据导入hive export HADOOP_COMMON_HOME=/hadoop export HADOOP_MAPRED_HOME=/hadoop cp /hive ...