/*by sam哥*/
JNI一般用在调用c或者c++的链接库,由于JNI调用时一般需保证名称一致,所以一般做法是先写java函数名再去写c/c++(你nb了就不用这么干了)
我做了个入门级的教程,适合对c/c++懂得不多的童鞋
这个例子里去调用本地的numplus接口实现两整数相加
首先是java的函数申明
//NativeMethod.java,主要用来放jni接口
//以下都用的default package
public class NativeMethod
{
public static native int numplus(int a,int b);
}
//Main.java,用来调用测试jni接口
public class Main {
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println(NativeMethod.numplus(1, 2));
}
static{
System.loadLibrary("jnidll");
}
}
搞完后在eclipse里面会生成NativeMethod.class文件,cmd窗口过去,输入javah -jni NativeMethod生成NativeMethod.h文件,这个就是jni的c++申明了。
注意使用该命令时到class文件根目录下执行,即如果类在/bin/test/jni/MyJni.class,则需要到bin目录下执行javah -jni test.jni.MyJni
为了制作dll,我用的code blocks,比较轻量级不像vc不太好卸载
打开code blocks,新建工程选新建动态库工程
建好后将系统生成的main.cpp和main.h删掉不要(你要也行),将上面javah生成的NativeMethod.h拷贝进来,然后新建NativeMethod.cpp,然后将jdk安装目录下C:\Program Files\Java\jdk1.6.0_05\include的所有.h文件拷贝到工程里,你也可以引用到工程里,但我对codeblocks不熟所以用的比较笨的办法。如图:
然后在NativeMethod.cpp实现该方法,点击左上角的编译,成功后会在workspace里的debug目录下生成dll;
最后将这个dll拷贝到eclipse工程根目录下运行。OK。
我在弄得时候出现了java.lang.UnsatisfiedLinkError,没搞清楚原因,但是找到了解决办法:
这是别的大牛的解决问题的方法:
http://dikar.iteye.com/blog/382701
我用的是在方法名前面加下划线,别说,还真就行了。
好了,eclipse工程和codeblocks工程都发上来,大家一起入门吧。
/*by sam哥*/
- 大小: 7.2 KB
- 大小: 25.6 KB
分享到:
相关推荐
简洁使用 eclipse+mingw 环境编译 java jni:安装mingw,eclipse,无需javah等等操作。工程中的文件路径可能要根据具体环境修改,详见编译提示(如果有的话)
eclipse ndk Hello-jnieclipse ndk Hello-jnieclipse ndk Hello-jnieclipse ndk Hello-jni
该资源抱哈了一个用java实现的jni的基本实例,可以运行,包含了其中的cpp文件,简单易懂,喜欢的下载!
文档里描述了如何通过jni方法在java与c++代码之间传递非基本类型数据
本文档根据网上的学习资料和本人的亲身实践,详细讲解了在windows系统平台下如何配置ndk的过程。 1、安装cygwin 2、下载ndk 3、ndk和cygwin的配置 4、下载安装eclipse插件cdt 5、ndk与eclipse的集成 6、运行实例...
完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...
本实例为java对jni的调用,实现c到java的字符串传递. 详细见:http://blog.csdn.net/xuwenneng/article/details/54311589
NI调用IC卡读卡器的DLL,既支持64位程序也支持32位程序, 调用也非常方便,下面将介绍JNI调用IC卡读卡器DLL的方式
Java jni调用c实例
这个是自己处理扫码枪数据用的,通过JNI实现,把扫码枪设置成串口模式即能被HOOK了.当然键盘也能HOOK,处理比较简单,查下API可以HOOK鼠标等.有C源码,头文件等.动态库用MINGW编译.在WIN7可用,其它平台未试
本资源包括JAVA工程,C++工程,C#dll测试工程
完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ ...Java JNI教程!
Java JNI调用动态库(Linux、Windows)的实现步骤
world 文档,描述了Android g1环境,C、Java、JNI调用(C调Java、Java调C)基本运算、方法调用、字符串连接的效率测试结果。
如果 想用java 调用dll 这个文档 会给你帮助的
利用JAVAH生成C++的JNI类,使用JAR打包生成可执行包
Java采用JNI调用VC++生成的dll(Java与C++交互)
java jni实现时的vs2010的c++代码