JNI的制作和调用流程
来源:互联网 发布:js脚本 调用 c dll 编辑:程序博客网 时间:2024/05/17 07:27
1.写一个java类,该类包含了需要调用的本地方法的描述,如:
package com.jose
public class Test {
public native long method1(String mess);
public native long method2(String mess);
static { System.loadLibrary("TestImp"); }
}
其中TestImp.dl文件放在windows安装目录的system32下面,同时设置好classpath(.)
注意:一般情况下java类有放在包里和没有包两种情况。
2.提示符下使用命令javac -d . Test.java 编译上面写的java文件。
此时会生成相应的包的目录结构,并生成Test.class文件。
3.提示符下使用命令javah -jni com_jose_Test,此时会在当前目录下生成文件com_jose.Test.h文件,该文件是由包名+类名组成,中间用分隔符(_)隔开。
4.使用VC来编写本地方法的实现函数,最后编译成.dll文件
①选择new->projects(选择Win32 Dynamic-Link Library,以第一步中指定的库名TestImp作为工程名)->OK->An ampty DLL project->Finish
②选择Tools->Options->Directories 添加JNI所需的头文件
③将第三步生成的com_jose_test.h文件拷贝到TestImp工程中,并将其添加到TestImp.cpp的头文件中
注意事项说明:
㈠我们知道DLL有两种导出函数的方法,一种就是在.def文件中定义,另一种是在定义函数时使用关键字_declspec(dllexport)。而在JNI中函数定义关键字JNIEXPORT实际就在jni_md.h中如下定义:
#define JNIEXPORT_declspec(dllexport)
可见JNI默认的导出方式为第二种。使用第二种方式产生的导出函数名会根据编译器发生变化,在有的情况下会发生找不到导出函数的问题(我们在JSP中调用JNI的时候就发生这样的问题,后来强加一个.def文件重新导出函数就解决了)。因此最好还是自己定义个.def文件,强制导出的方法比较好点。
㈡根据本列,写一个TestImp.def文件,如下:
LIBRARY "TestImp"
DESCRIPTION 'ImageConvertDll Windows Dynamic Link Library'
EXPORTS;
Explicit exports can go here Java_com_jose_Test_method1 Java_com_jose_Test_method2 最后生成dll文件
- JNI的制作和调用流程
- JNI和NDK编程(四)JNI调用Java方法的流程
- JNI调用Java方法的流程
- JNI 学习笔记(一)-- JNI函数调用流程,JNI理解和基本数据类型
- Android-JNI环境搭建和调用流程+小demo
- Android-JNI环境搭建和调用流程+小demo
- Anroid JNI初接触---打包和调用so流程步骤
- JNI和NDK编程(一)JNI的开发流程
- Java使用JNI调用C++的完整流程
- 从NDK下载到JNI调用的整个流程
- Java JNI调用dll中的C代码的流程
- NDK 与 JNI 的关系以及调用流程
- jni 调用c和c++的区别.
- jni 调用c和c++的区别.
- jni 调用c和c++的区别.
- JNI调用C和C++的区别
- jni方法的注册和调用
- JNI的实现流程
- Java SourceCode Parsing(Java源代码分析器)
- 学习CSLA.net的一些感受
- 内联函数学习笔记
- 人渣撞死人才
- Hibernate的工作原理
- JNI的制作和调用流程
- 来自中国茶乡:安溪人周文清--带给你的祝福
- 关于Java中字符编码的一点总结
- Action中参数传递实用方法 Map session
- #define用法
- 我想要
- 不要用with语句,尽管它很优雅
- qWikiOffice Web Desktop 简介 附翻译
- 数组中字符串替换的几种方式