- 浏览: 9477 次
最新评论
JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能。使用JAVA JNI接口主要包括以下步骤:
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
本文使用一个简单的helloWorld示例演示JNI的使用。
(1)编写JAVA代码
public class helloWorld
{
public native void SayHello(String name);
static
{
System.loadLibrary("examdll");
}
public static void main(String [] argv)
{
helloWorld hello = new helloWorld();
hello.SayHello("myName");
}
}
(2)编译JAVA代码
javac helloWorld.java
(3)生成实现函数头文件
javah -classpath . helloWorld
得到的文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class helloWorld */
#ifndef _Included_helloWorld
#define _Included_helloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: helloWorld
* Method: SayHello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_helloWorld_SayHello
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
(4)在VC中实现上述函数
#include "helloWorld.h"
#include <stdio.h>
#include <string.h>
void JNICALL Java_helloWorld_SayHello(JNIEnv * env, jobject obj, jstring str)
{
jboolean b = true;
char s[80];
memset(s, 0, sizeof(s));
strcpy_s(s ,(char*)env->GetStringUTFChars(str, &b));
printf("Hello, %s", s);
env->ReleaseStringUTFChars(str , NULL);
}
**** 这是JNI的关键:通过env我们可以使用JAVA提供的一组函数操作与转换函数传递的参数。
(5)编译VC项目得到动态连接库 examdll.dll。
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
本文使用一个简单的helloWorld示例演示JNI的使用。
(1)编写JAVA代码
public class helloWorld
{
public native void SayHello(String name);
static
{
System.loadLibrary("examdll");
}
public static void main(String [] argv)
{
helloWorld hello = new helloWorld();
hello.SayHello("myName");
}
}
(2)编译JAVA代码
javac helloWorld.java
(3)生成实现函数头文件
javah -classpath . helloWorld
得到的文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class helloWorld */
#ifndef _Included_helloWorld
#define _Included_helloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: helloWorld
* Method: SayHello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_helloWorld_SayHello
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
(4)在VC中实现上述函数
#include "helloWorld.h"
#include <stdio.h>
#include <string.h>
void JNICALL Java_helloWorld_SayHello(JNIEnv * env, jobject obj, jstring str)
{
jboolean b = true;
char s[80];
memset(s, 0, sizeof(s));
strcpy_s(s ,(char*)env->GetStringUTFChars(str, &b));
printf("Hello, %s", s);
env->ReleaseStringUTFChars(str , NULL);
}
**** 这是JNI的关键:通过env我们可以使用JAVA提供的一组函数操作与转换函数传递的参数。
(5)编译VC项目得到动态连接库 examdll.dll。
发表评论
-
java SpringMVC
2014-01-21 17:02 0package com.cweb.system.commo ... -
JDBC 建立连接公共操作类(静态方式与单例方式)
2013-08-30 00:31 0package com.ighost.jdbc; im ... -
jdbc连接数据库(单例模式)
2013-08-30 00:30 0... -
【JDBC单例】和【C3P0连接池基本用法】的对比
2013-08-30 00:25 0最近需要从一张表中查询大量数据,做了如下实验: 平台: ... -
cglib与xstream结合构造webservice的xml格式的入参返参的动态生成
2013-08-30 00:20 0cglib与xstream结合构造webservice的xm ... -
JNI原理
2013-08-30 00:15 0NI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与 ... -
java 与 FTP
2013-08-30 00:14 0import java.io.ByteArrayInputS ... -
JNI原理
2013-08-30 00:11 0NI是JAVA标准平台中的一个重要功能,它弥补了JAVA的 ... -
java 静态块 代码块 静态变量 实例变量 构造
2013-08-30 00:06 1026package job; public clas ... -
静态代码块、非静态代码块、构造函数的执行顺序
2013-08-30 00:04 774public class ExA { static ... -
java 连接 DB 总汇合
2013-08-30 00:02 6601、Oracle8/8i/9i数据库(thin模式) C ... -
JAVA 中的四种解析XML方式
2013-08-30 00:01 780解析XML XML现在已经成为一种通用的数据交换格式,平台的 ... -
JAVA 解析 XML 的 四种技术
2013-08-24 02:52 6661 解析XML XML现在已经成为一种通用的数据交换格 ... -
单例模式 和 线程安全
2013-08-20 21:51 808// 1.单例分两种: // ... -
java解析XML dom方式
2013-08-20 21:46 823/** * @param args ... -
servlet产生验证码
2013-08-20 21:42 595package com.mweb.user.servlet; ...
相关推荐
ubuntu上面使用jni例子
JNI例子学习
Android中调用JNI例子,对应博客http://blog.csdn.net/wwj_748/article/details/28300451
Stuido中使用JNI例子HelloWorld,带制作so文件,并在别的项目中调用
ndk自带的最简单jni例子:hello-jni
安卓JNI例子,也就是java调用c语言的例子,可以参考下,里面包含了两个demo,是两个不同的方式创建的工程
Android中调用JNI例子.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android应用源码串口通信JNI例子.zip
一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放...
ndk andriod jni 例子 简单 实用 亲自验证
这是我写的关于jni使用int数组的例子。共享一下
Android——JNI的例子,步骤详细
Android JNI例子
该app为android系统下简单的jni示例,是学习JNI的好例子,为入门者提供简单的JNI环境配置示例
jni开发的demo,实现了Java调用native和native调用Java的功能。详情见博客:http://blog.csdn.net/hello_chillax/article/details/50920766
jni例子 本地方法访问Java的属性与方法例子代码
给出了简单的JNI例子
jni最简单例子,注释详细
NULL 博文链接:https://407827531.iteye.com/blog/1313926
基于Android,使用Java的JNI技术调用底层代码的演示,适合刚入门JNI的程序员参考使用的demo小案例代码,简单易用。