java 调用jni方法_Java JNI 本地方法调用Java对象方法
// 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对象方法相关推荐
- java父类调用子类方法_Java 中父类怎么调用子类的方法?
父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: pack ...
- java jni开发_Java JNI开发实践记录
当使用到JNI的时候,基本可以肯定Java的平台移植性注定减弱,接下来记录一次使用Java JNI开发的经历. 关于Java JNI的相关资料参见: 下面是使用JNI常见三种场景: 1.在Java应用 ...
- java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?
核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...
- 更新尺寸调用什么方法_Java 多线程启动为什么调用 start() 方法而不是 run() 方法?...
多线程在工作中多多少少会用到,启动 多线程调用的是 start() 方法,而不是 run() 方法,这是为什么呢? 在探讨这个问题之前,先来了解(复习)一些多线程的基础知识~ 线程的状态 Java 中 ...
- java condition详解_Java使用Condition控制线程通信的方法实例详解
Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...
- java exception 行号_java日志记录错误的文件_方法_行号_报错信息
1.java日志记录错误的文件.方法.行号.报错信息 StackTraceElement s= e.getStackTrace()[0]; 1.1.记录保存的文件s.getFileName() 1.2 ...
- java中使用配置文件_Java中使用Properties配置文件的简单方法
Java中使用Properties配置文件的简单方法 properties Properties文件是java中的一种配置文件,文件后缀为".properties",文件的内容格式 ...
- java定义私有变量_Java Reflection(七):私有变量和私有方法
在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点.使用这个功能并不困难,在进行单元测试时这个功能非常有效.本节会向你展示如何使用这个功能. 注意:这个功能只 ...
- java ip地址接口_java获取ip地址与网络接口的方法示例
java.net包 大家应该都知道,网络相关对象在java.net包中,Java net包下的类如下: 1.获取主机对象InetAddress //获取本地主机对象 InetAddress host ...
最新文章
- 创建, 发布自己的 Vue UI 组件库
- 四十三、Linux磁盘管理和Shell编程
- Flex与.NET互操作(十四):FluorineFx的AMF协议通信
- axure html显示效果,Axure RP基础篇: 实现循环显示效果的两种方法
- 使用SuperMap对接天地图
- HQL (五) 外置命名查询(sql语句单独保存起来)
- java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器
- THREEJS - 动态标签(dom方式)
- 【操作系统/OS笔记12】同步互斥的三种实现方法:禁用硬件中断、基于软件的解决方案、更高级的抽象
- *第六周*数据结构实践项目一【建立顺序栈算法库】
- Python argparse模块、argparse.ArgumentParser()用法解析
- java编译异常有哪些_java编译时异常有哪些?java常见异常有哪些?
- 7 个优秀 WordPress LMS 在线教育系统插件比较(优点和缺点)
- 【2019最新最全版】Java基础入门视频
- Gos —— 显示器控制
- Java绘制图形(正方形/三角形/圆/网以及填充颜色)
- 详解u盘装系统启动不了怎么办
- ‘gbk‘ codec can‘t decode byte 0xa7 in position 40: illegal multibyte sequenc
- 购房指南—买房经验总结
- 运放放大倍数计算公式_独家秘笈|运算放大器分析
热门文章
- ubuntu下u盘变成只读文件
- 04-----赋值运算符
- Program Remote Key For 2014 Ford Mustang Via SKP-900
- 8.19 NOIP模拟测试26(B) 嚎叫响彻在贪婪的厂房+主仆见证了 Hobo 的离别+征途堆积出友情的永恒...
- switch case 遇到判断type分支的写法
- Redis的实现原理
- 数据库连接池的作用及c3p0的详解(转载他人的--合理掌握学习方式)
- jqGrid方法整理
- 关于XML序列化与CultureInfo
- Android中的PopUpWindow