- 浏览: 865783 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
目前 java 与 dll 交互的技术主要有 3 种: jni , jawin 和 jacob 。 Jni ( Java Native Interface )是 sun 提供的 java 与系统中的原生方法交互的技术(在 windows\linux 系统中,实现 java 与 native method 互调)。目前只能由 c/c++ 实现。后两个都是 sourceforge 上的开源项目,同时也都是基于 jni 技术的 windows 系统上的一个应用库。 Jacob ( Java-Com Bridge )提供了 java 程序调用 microsoft 的 com 对象中的方法的能力。而除了 com 对象外, jawin ( Java/Win32 integration project )还可以 win32-dll 动态链接库中的方法。就功能而言: jni >> jawin>jacob ,其大致的结构如下图:
jni 技术体系功能结构图
就易用性而言,正好相反: jacob>jawin>>jni 。
Jvm 封装了各种操作系统实际的差异性的同时,提供了 jni 技术,使得开发者可以通过 java 程序(代码)调用到操作系统相关的技术实现的库函数,从而与其他技术和系统交互,使用其他技术实现的系统的功能;同时其他技术和系统也可以通过 jni 提供的相应原生接口开调用 java 应用系统内部实现的功能。
在 windows 系统上,一般可执行的应用程序都是基于 native 的 PE 结构, windows 上的 jvm 也是基于 native 结构实现的。 Java 应用体系都是构建于 jvm 之上。
Windows 系统上的 java 体系
Jni 对于应用本身来说,可以看做一个代理模式。对于开发者来说,需要使用 c/c++ 来实现一个代理程序( jni 程序)来实际操作目标原生函数, java 程序中则是 jvm 通过加载并调用此 jni 程序来间接地调用目标原生函数。
Jni 调用过程示意图
Jni 程序开发的一般操作步骤如下:
l 编写 java 中的调用类
l 用 javah 生成 c/c++ 原生函数的头文件
l c/c++ 中调用需要的其他函数功能,实现原生函数 ( 原则上可以调用任何资源 )
l 将项目依赖的所有原生库和资源加入到 java 项目的 java.library.path
l 生成 java 程序
l 发布 java 应用和 dll 库
Jni
程序开发示例:
1、
在
eclipse
项目中新建一个
TestHello.java
,输入以下内容:
public
class
TestHello {
static
{
System.loadLibrary
(
"TestHello"
);
}
public
static
native
void
hello(String msg);
public
static
void
main(String[] args) {
hello
(
"Hello,Kimm!"
);
}
}
编译生成
TestHello.
class
文件。
2、
在命令行下使用
javah TestHello
命令,生成
TestHello.h
头文件(就是
jni
代理
stub
的接口)。
3、
在
VC6
中新建一个项目
TestHello,
项目类型为
Win32 Dynamic-Link Library
。点击
OK
。
在弹出的窗口中选择
A simple DLL project
,点击
Finish
。
打开项目所在的文件目录,将步骤
2
中生成的
TestHello.h
文件复制到此目录。点击左边中间的
FileView
,切换到文件浏览模式。在
Header Files
上点击右键,选择
Add Files to Folder…
。
选择
TestHello.h
文件,点击
OK
。
打开
StdAfx.h
文件,再最后面添加:
#include <jni.h>
#include "TestHello.h"
打开
TestHello.cpp
文件,在最后面添加一段代码:
JNIEXPORT void JNICALL Java_TestHello_hello(JNIEnv * env, jclass obj, jstring jMsg)
{
const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);
MessageBox( 0, strMsgPtr,"Message box from VC++ ", 0 );
env->ReleaseStringUTFChars( jMsg, strMsgPtr);
}
在 VC 的菜单上选择 Tools-Options… ,打开选项对话框。在 Directories 文件夹,添加上 jdk 所在文件夹下的 include 和 include\win32 文件夹。
点击 VC 上的菜单项 Build-Build All ,生成 TestHello.dll 。
4、 将 VC 项目 Debug 文件夹中的 TestHello.dll 复制到 TestHello.class 所在的文件夹下。
5、 在命令行下输入 java TestHello ,弹出 MessageBox 对话框。调用 win32 api 成功。
- TestHello.rar (3.1 MB)
- 下载次数: 7
发表评论
-
关于Bad version number in .class file的问题
2010-11-15 14:20 1002关于Bad version number in .class ... -
一个获取文件crc32校验码的简洁的java类
2010-05-12 19:48 3277从jdk1.4开始,java核心包里已经提供对crc计算的支持 ... -
Windows下Apache与Tomcat的整合
2010-05-12 13:52 1080为了完成这个任务,在 ... -
SSL双向认证java实现
2010-05-09 11:35 1799本文通过模拟场景,介 ... -
java.util.ResourceBundle 使用详解
2010-04-28 19:39 855一、认识国际化资源文件 这个类提供软件国际化的捷 ... -
基于JAAS实现登录
2010-04-25 22:11 1265JAAS:Java Authentication and ... -
什么是JAAS,以及灵活的Java安全机制
2010-04-25 22:05 1891今天在论坛上看到JASS,不清楚是什么呢,网上找了一下,受益良 ... -
Java插件技术
2010-04-25 21:31 21551.Java插件技术 Java插件技术(Java Plu ... -
java RMI的例子(转)
2010-04-25 21:11 954参考别人的程序后写了个自己的RMI 程序RMI ,远程方法 ... -
Java安全通信、数字证书及应用实践(转)
2010-04-21 21:05 1677摘要 : 在本文 ... -
Eclips 内存溢出
2010-04-13 16:26 1046在Eclipse 根目录下找到eclipse .ini ... -
Eclipse 启动不起来异常:JVM terminated. Exit code=-1
2010-04-11 10:09 7464Eclipse 启动不起来,出现以下错误: ... -
Java程序员需要了解的几个开源协议介绍
2009-12-21 21:32 1120介绍几个比较常见的开 ... -
apache lucene介绍
2009-12-15 09:16 1954什么是lucene Apache Lucene是一个开放源程序 ... -
Java基础:Java中堆内存与栈内存分配浅析
2009-08-11 20:19 1353Java 把内存划分成两种:一种是栈内存,另一种是堆内存 ... -
对synchronized(this)的一些理解
2009-07-23 10:21 1177一、当两个并发线程访问同一个对象object中的这个synch ... -
Linux下JNI调用
2009-07-09 12:43 1461整个实现过程可以分为五步来完成: 1)写一个声明了nativ ... -
如何在Java中执行其它程序
2009-07-09 12:42 2309在编写Java程序时,有时 ... -
linux下jdk的安装与卸载
2009-07-06 10:46 2107下面是卸载步骤: 用ro ... -
java.util.Date和java.sql.Date的区别及应用
2009-06-21 14:35 1139java.util.Date 就是在除了SQL语句的情况下面使 ...
相关推荐
JNI,全称Java Native Interface,是Java平台标准的一部分,它为...总的来说,JNI技术是Java开发者必备的技能之一,尤其在需要与本地代码交互或进行性能优化时。理解并熟练掌握JNI,能够极大地扩展Java应用程序的能力。
在深入探讨Android JNI技术实现的过程中,我们首先需要理解JNI(Java Native Interface)的基本概念与作用。JNI是一种标准的Java平台接口,它允许Java代码与其他语言(如C、C++)编写的本地代码进行交互,这对于...
本教程将深入探讨如何在Android应用中使用JNI技术。 首先,我们需要理解JNI的工作原理。JNI提供了一种方式,使得Java代码可以调用本地(非Java)函数,同时本地代码也可以调用Java方法。这通常是通过创建本地方法...
- JNI技术手册中涵盖了使用JNI从Java调用C/C++代码的详细步骤,包括从Java代码调用C/C++的六个步骤。 -JNI的使用涉及数据类型的对应关系,包括Java基本数据类型和引用类型(如String、对象、数组)与C/C++类型的转换...
这个"JNI完全技术手册"显然是一份详尽的指南,涵盖了JNI的各个方面,包括基本概念、设置环境、调用本地方法、处理数据类型、异常处理等。下面将详细介绍这些知识点。 1. **JNI基础**:JNI是Java与本地代码交互的...
这份"JNI技术手册"包含了对JNI的深入理解和实践操作的全面指导。 JNI的核心概念主要包括以下几个部分: 1. **本地方法接口**:JNI提供了一套接口,使得Java虚拟机(JVM)能够调用本地(非Java)代码,同时也让本地...
JNI(Java Native Interface)技术是Java平台提供的一种接口,允许Java代码和其他语言写的代码进行交互。在嵌入式软件开发中,JNI起到了桥梁的作用,它连接了Java虚拟机(JVM)与本地(非Java)代码,使得开发者可以...
Java技术中的JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如优化性能、访问操作系统特定功能、调用已有的C/C++库等。在这个...
本篇将深入探讨三个JNI技术相关的Demo,涵盖Java调用C/C++,C/C++调用Java以及JNI中的数据类型转换和访问。 1. **Java调用C/C++**: 在这个Demo中,Java代码通过JNI接口来调用C或C++函数。首先,你需要在Java类中...
### Java的JNI跨平台技术详解 #### 一、引言 随着互联网技术的快速发展与广泛应用,跨平台服务的需求日益增长。为了满足这一需求,许多网络服务商开始开发自己的网络服务(Web Service),以抢占逐渐明晰的面向...
这本书《JNI完全技术手册》应该是深入探讨这个主题的详细指南。 JNI的核心概念主要包括以下几个方面: 1. **本地方法接口**:本地方法是Java类中的一个方法,但它的实现是在本地(非Java)代码中。JNI提供了定义和...
### Java JNI 技术文档教程知识点详解 #### 一、JNI技术概述 **Java Native Interface (JNI)** 是Java平台的一项强大特性,它允许Java应用程序调用用其他编程语言(如C或C++)编写的本地代码,同时也支持从这些...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地...
总结来说,这个"JNI DEMO"是一个完整的示例,展示了如何使用Java的JNI技术来调用C/C++编写的DLL。它包括了Java代码、JNI接口的实现、DLL的编译以及Java应用的运行。对于初学者,这是一个很好的实践教程,即使没有...
JNI(Java Native Interface)是Java平台的一个重要组成部分,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中尤其重要,因为它是连接Java应用程序与本地C/C++库的桥梁,尤其是在性能敏感或需要利用...
标题“帮你快速上手JNI技术”表明了本文档将指导读者如何快速学习并掌握JNI(Java Native Interface)技术。JNI是Java编程语言提供的一种标准编程接口,允许Java代码与其他语言写的代码进行交互,尤其是C和C++代码。...