JAVA通过JNI调用C函数Demo

来源:互联网 发布:淘宝众筹有回报吗 编辑:程序博客网 时间:2024/06/11 07:01

废话少说直接上代码.我们的JAVA文件"TestJni.java"中的代码看起来是这样纸的:

package mm.nn.oo;public class TestJni { public native void ShowStr(String Str); public native int Add(int x,int y);    static  {  System.loadLibrary("TestJni"); }  public static void main(String[] args)  {  new TestJni().ShowStr("This String IS From JAVA!");  System.out.println(new TestJni().Add(2,3)); }}
接下来我们生成相应的C的.H文件.具体过程看本博客相应文章此处不再赘述.生成后的.H文件看起来是这样子的:

#include <jni.h>#ifdef __cplusplusextern "C" {#endif JNIEXPORT void JNICALL Java_mm_nn_oo_TestJni_ShowStr(JNIEnv *pEnv,jobject Obj,jstring Str); JNIEXPORT jint JNICALL Java_mm_nn_oo_TestJni_Add(JNIEnv *pEnv, jobject Obj, jint m, jint n);#ifdef __cplusplus}#endif
为了简便我们将上一步生成的.H文件直接改成.C文件并在其中实现两个函数代码如下:

JNIEXPORT void JNICALL Java_mm_nn_oo_TestJni_ShowStr(JNIEnv *pEnv,jobject Obj,jstring Str){ const char* pStr = (*pEnv)->GetStringUTFChars(pEnv,Str,0); printf("%s\n",pStr); (*pEnv)->ReleaseStringUTFChars(pEnv,Str,pStr);}JNIEXPORT jint JNICALL Java_mm_nn_oo_TestJni_Add(JNIEnv *pEnv, jobject Obj, jint m, jint n){ return m+n;} 
然后我们将上一步的.C文件生成.DLL文件.你可以新建一个DLL工程也可以用命令行.我们这里选择后者来生成.具体步骤看上传的附件即可.

然后我们用javac TestJni.java命令生成对应的.CLASS文件并拷贝到与包名mm.nn.oo对应的文件夹mm\nn\oo下.然后执行命令java mm.nn.oo.TestJni即可.

本Demo涉及到的文件下载地址:http://t.cn/8swtB4A希望对大家有所帮助.文章讲的不是很详细但是大家稍稍摸索下就可以明白的拜拜再见

本人郑重声明如下一、本文来自CSDN博客,传送门:http://BlOG.CSDN.NET/yirancpp二、All Rights Reserved. 任何个人或网站转载本文时不得移除本声明.三、不得对文章进行修改,除非明确说明.同时欢迎大家评论转载和分享.
1 0
原创粉丝点击