JAVA通过JNI调用C函数Demo

废话少说直接上代码.我们的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 __cplusplus
extern "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. 任何个人或网站转载本文时不得移除本声明. 三、不得对文章进行修改,除非明确说明.同时欢迎大家评论转载和分享.
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页