如何创建一个简单的JNI调用
来源:互联网 发布:淘宝图片助手官方下载 编辑:程序博客网 时间:2024/05/08 20:50
JNI就是java native interface 就是java方法调用本地的C++的代码。
创建JNI的几个过程
(1)首先在java类中生命一个native方法
(2)使用javah 将包含native方法的类编译成c++的头文件
(3)按照C++头文件来写C++的源文件
(4)将C++的源文件编译成动态链接库
(5)把DLL文件加入到PATH环境变量下
(6)java类中加载DLL,然后调用声明的native方法
首先在IDEeclipse中创建一个项目:
package jni;
public class TestNative {
public native void sayhello(); //本地方法
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.loadLibrary("NativeCode");
TestNative tst=new TestNative();
tst.sayhello();
}
}
我的eclipse存放的路径是E:\学习资料\java\eclipise_flexpractice\eclipise_flexpractice\TestNativeCode
使用windows的dos进入到这个工程的路径即(E:\学习资料\java\eclipise_flexpractice\eclipise_flexpractice\TestNativeCode)
使用javah 命令对bin目录下的TestNative .class使用javah
javah jni.TestNative
生成一个jni_TestNative.h 头文件
使用VS创建一个DLL项目,将jni_TestNative.h 加载到该DLL的头文件中,同时创建一个Source.cpp 实现该头文件中的方法,如下:
这个自动生成的jni_TestNative.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class jni_TestNative */
#ifndef _Included_jni_TestNative
#define _Included_jni_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jni_TestNative
* Method: sayhello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_jni_TestNative_sayhello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
Source.cpp 源文件
#include "Source.h"
#include "jni_TestNative.h"
#include <iostream>
using namespace std;
Source::Source(void)
{
}
Source::~Source(void)
{
}
JNIEXPORT void JNICALL Java_jni_TestNative_sayhello(JNIEnv *env, jobject onject){
cout<<"hello world"<<endl;
}
同时还需要将jdk 中include目录下的jni.h 以及include/Win32/jni_md.h头文件复制到VS相应的路径下,我的VS的项目路径是:E:\c++\NativeCode\NativeCode
最后执行,会在项目的debug下生成NativeCode.dll
同时将将包含NativeCode.dll的路径E:\c++\NativeCode\debug 加载到系统的环境变量中,IDE eclipse就可以自动到path目录下加载相应的NativeCode.dll。
- 如何创建一个简单的JNI调用
- 一个简单的JNI调用的实现
- 如何在linux下创建一个简单的JNI程序HelloWorld
- Android调用Jni,非常简单的一个Demo
- Android JNI(NDK)简单学习(环境搭建,创建一个JNI项目的基本流程)
- 如何创建一个简单的线程
- 如何创建一个简单的数据库
- 一个简单的JNI使用
- 一个简单的JNI示例
- JNI的一个简单实例
- 简单的JNI的调用的过程
- C调用LUA创建一个简单的LUA解释器
- Android jni的调用过程JNI_OnLoad(),利用Android NDK编写一个简单的HelloWorld
- 如何创建一个简单网页
- Jni 简单实战 写一个c调用java的辅助类
- java jni 入门1 - 一个简单的从Java程序中调用C函数
- 简单的使用jni调用java方法
- 安卓简单的JNI调用
- Codeforces Round #329 (Div. 2) D. Happy Tree Party
- Android layout布局的优化
- Apache ActiveMQ 不作为的问题
- [git]查找某个地方是谁修改的一种方法
- android listview 长按事件setOnItemLongClickListener不响应问题
- 如何创建一个简单的JNI调用
- Uva 1401 Remember the Word 字典树+DP
- 如何新建一个menu
- 视频网站(网页)上获取视频源地址 详细过程
- Volley学习小结
- jsp小结15 - 9个内置对象08 response
- Xunsearch的文档写的真好
- android Spinner默认不选中
- rn_xtcxyczjh-10 动态指针数组[size_t, realloc,gcc -D编译时定义宏]