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的更多相关文章
随机推荐
- python之MySQL学习——输出指定条件的结果集
# 引入pymysql模块 import pymysql as pm # 数据库连接 db = pm.connect(host=",database='task', charset='utf ...
- 创建超小的Golang docker 镜像
原文: http://colobu.com/2015/10/12/create-minimal-golang-docker-images/ 本文对于创建超小的镜像非常有用 Docker是PaaS供应商 ...
- 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找
一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...
- FW: AMD, CMD, CommonJS和UMD
javascript 我是豆腐不是渣 4月5日发布 推荐 2 推荐 收藏 32 收藏,486 浏览 今天由于项目中引入的echarts的文件太大,requirejs经常加载超时,不得不分开来加载ech ...
- 兼容获取元素当前样式 currentStyle || getComputedStyle
function getStyle(ele, attr) { return ele.currentStyle ? ele.currentStyle[attr] : window.getComputed ...
- Redis数据存储优化机制(转)
原文:Redis学习笔记4--Redis数据存储优化机制 1.zipmap优化hash: 前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个h ...
- 配置 Docker 镜像下载的本地 mirror 服务
Docker registry 工具如今已经非常好的支持了 mirror 功能,使用它能够配置一个本地的 mirror 服务.将 pull 过的镜像 cache 在本地.这样其他主机再次 pull 的 ...
- MySQL查询操作
查询执行路径中的组件:查询缓存.解析器.预处理器.优化器.查询执行引擎.存储引擎SELECT语句的执行流程: FROM Clause --> WHERE Clause --> GROUP ...
- boost智能指针总结
智能指针是一种具备指针类似行为的对象,当不在需要它的时候自动删除其引用的c++对象.直接点说就是自动析构C++对象. boost提供了6种智能指针,如下所示: scoped_ptr <boost ...
- jQuery Mobile 手动显示ajax加载器
在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更 ...