// c 代码

///

/**************************************

Util.h

**************************************/

#ifndef ROB_UTIL_H

#define ROB_UTIL_H

void printInt(int i, LPCSTR title)

{

LPSTR m = (LPSTR)malloc(10);

itoa((int)i, m, 10);

MessageBox(NULL, m, title,MB_OK);

free(m);

}

BOOL prints(PVOID msg, LPCSTR title)

{

LPSTR m = (LPSTR)malloc(10);

itoa((int)msg, m, 10);

MessageBox(NULL, m, title,MB_OK);

free(m);

if(msg == NULL)

return FALSE;

return TRUE;

}

#endif

/*******************************

test_jni_WinMsgBox.h

*******************************/

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class test_jni_WinMsgBox */

#ifndef _Included_test_jni_WinMsgBox

#define _Included_test_jni_WinMsgBox

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class:     test_jni_WinMsgBox

* Method:    showMsgBox

* Signature: (Ljava/lang/String;)V

*/

JNIEXPORT void JNICALL Java_test_jni_WinMsgBox_showMsgBox

(JNIEnv *, jobject, jstring);

/* Class:     test_jni_WinMsgBox

* Method:    start

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_test_jni_WinMsgBox_start

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

/*******************************

WinMsgDll.cpp

*******************************/

#include "windows.h"

#include "test_jni_WinMsgBox.h"

#include "Util.h"

static jobject myObj;

static JNIEnv *myEnv;

static LPBYTE buffer;

void clean()

{

if(buffer != NULL)

free(buffer);

}

void init()

{

buffer = (LPBYTE)malloc(261);

}

void power(IN BYTE option)

{

clean();

init();

}

void transmit(IN LPBYTE inPutBuffer, IN int inPutLen,

OUT LPBYTE outPutBuffer, OUT int &outPutLen)

{

jbyteArray apdu = myEnv->NewByteArray(261);

// jbyteArray _apdu = myEnv->NewByteArray(261);

myEnv->SetByteArrayRegion(apdu, 0, inPutLen, (jbyte*)inPutBuffer);

jclass myClass = myEnv->GetObjectClass(myObj);

jmethodID mid = myEnv->GetMethodID(myClass, "processAPDU", "([BI[B)I");

outPutLen = myEnv->CallIntMethod(myObj, mid, apdu, inPutLen, apdu);

jboolean a = 1;

jbyte* response = myEnv->GetByteArrayElements(apdu, &a);

memcpy(outPutBuffer, response, outPutLen);

//释放

myEnv->ReleaseByteArrayElements(apdu, response, JNI_ABORT);

}

void testSend()

{

buffer[0] = 0x20;

buffer[1] = 0x11;

buffer[2] = 0x12;

int refLen;

transmit(buffer, 3, buffer, refLen);

for(int i = 0; i < refLen; i ++)

{

printInt(buffer[i], "response");

}

}

/*

* Class:     test_jni_WinMsgBox

* Method:    start

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_test_jni_WinMsgBox_start

(JNIEnv* env, jobject obj)

{

myObj = env->NewGlobalRef(obj);

myEnv = env;

power(0);

}

/*

* Class:     test_jni_WinMsgBox

* Method:    showMsgBox

* Signature: (Ljava/lang/String;)V

*/

JNIEXPORT void JNICALL Java_test_jni_WinMsgBox_showMsgBox

(JNIEnv * env, jobject obj, jstring str)

{

testSend();

}

//

// Java代码

/

/**************************

Main.java

**************************/

package main;

import test.jni.*;

public class Main

{

public static void main(String[] args)

{

WinMsgBox msg = new WinMsgBox();

msg.start();

msg.showMsgBox("");

}

}

/***********************

WinMsgBox.java

***********************/

package test.jni;

public class WinMsgBox

{

public int processAPDU(byte[] apdu, int apduLen, byte[] response)

{

System.out.println("WinMsgBox process Apdu");

for(int i = 0; i < apduLen; i ++)

System.out.println(apdu[i]);

response[0] = (byte)0x90;

response[1] = 0x00;

return 2;

}

static

{

System.loadLibrary("WinMsgDll");

}

public native void showMsgBox(String str);

public native void start();

}

最后修改于 2006-09-22 02:33

阅读(?)评论(0)

java 调用jni方法_Java JNI 本地方法调用Java对象方法相关推荐

  1. java父类调用子类方法_Java 中父类怎么调用子类的方法?

    父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: pack ...

  2. java jni开发_Java JNI开发实践记录

    当使用到JNI的时候,基本可以肯定Java的平台移植性注定减弱,接下来记录一次使用Java JNI开发的经历. 关于Java JNI的相关资料参见: 下面是使用JNI常见三种场景: 1.在Java应用 ...

  3. java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?

    核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...

  4. 更新尺寸调用什么方法_Java 多线程启动为什么调用 start() 方法而不是 run() 方法?...

    多线程在工作中多多少少会用到,启动 多线程调用的是 start() 方法,而不是 run() 方法,这是为什么呢? 在探讨这个问题之前,先来了解(复习)一些多线程的基础知识~ 线程的状态 Java 中 ...

  5. java condition详解_Java使用Condition控制线程通信的方法实例详解

    Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...

  6. java exception 行号_java日志记录错误的文件_方法_行号_报错信息

    1.java日志记录错误的文件.方法.行号.报错信息 StackTraceElement s= e.getStackTrace()[0]; 1.1.记录保存的文件s.getFileName() 1.2 ...

  7. java中使用配置文件_Java中使用Properties配置文件的简单方法

    Java中使用Properties配置文件的简单方法 properties Properties文件是java中的一种配置文件,文件后缀为".properties",文件的内容格式 ...

  8. java定义私有变量_Java Reflection(七):私有变量和私有方法

    在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点.使用这个功能并不困难,在进行单元测试时这个功能非常有效.本节会向你展示如何使用这个功能. 注意:这个功能只 ...

  9. java ip地址接口_java获取ip地址与网络接口的方法示例

    java.net包 大家应该都知道,网络相关对象在java.net包中,Java net包下的类如下: 1.获取主机对象InetAddress //获取本地主机对象 InetAddress host ...

最新文章

  1. 创建, 发布自己的 Vue UI 组件库
  2. 四十三、Linux磁盘管理和Shell编程
  3. Flex与.NET互操作(十四):FluorineFx的AMF协议通信
  4. axure html显示效果,Axure RP基础篇: 实现循环显示效果的两种方法
  5. 使用SuperMap对接天地图
  6. HQL (五) 外置命名查询(sql语句单独保存起来)
  7. java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器
  8. THREEJS - 动态标签(dom方式)
  9. 【操作系统/OS笔记12】同步互斥的三种实现方法:禁用硬件中断、基于软件的解决方案、更高级的抽象
  10. *第六周*数据结构实践项目一【建立顺序栈算法库】
  11. Python argparse模块、argparse.ArgumentParser()用法解析
  12. java编译异常有哪些_java编译时异常有哪些?java常见异常有哪些?
  13. 7 个优秀 WordPress LMS 在线教育系统插件比较(优点和缺点)
  14. 【2019最新最全版】Java基础入门视频
  15. Gos —— 显示器控制
  16. Java绘制图形(正方形/三角形/圆/网以及填充颜色)
  17. 详解u盘装系统启动不了怎么办
  18. ‘gbk‘ codec can‘t decode byte 0xa7 in position 40: illegal multibyte sequenc
  19. 购房指南—买房经验总结
  20. 运放放大倍数计算公式_独家秘笈|运算放大器分析

热门文章

  1. ubuntu下u盘变成只读文件
  2. 04-----赋值运算符
  3. Program Remote Key For 2014 Ford Mustang Via SKP-900
  4. 8.19 NOIP模拟测试26(B) 嚎叫响彻在贪婪的厂房+主仆见证了 Hobo 的离别+征途堆积出友情的永恒...
  5. switch case 遇到判断type分支的写法
  6. Redis的实现原理
  7. 数据库连接池的作用及c3p0的详解(转载他人的--合理掌握学习方式)
  8. jqGrid方法整理
  9. 关于XML序列化与CultureInfo
  10. Android中的PopUpWindow