Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116986
  • 博文数量: 83
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-31 11:07
个人简介

弃我去者,昨日之日不可留; 乱我心者,今日之日多烦忧。

文章分类

分类: Java

2014-11-13 15:51:20

Java中通过JNI调用C函数的过程

1、  编写Java代码 HelloJNI.Java

点击(此处)折叠或打开

  1. public class HelloJNI {
  2.     
  3.     /**
  4.      * @param args
  5.      */
  6.     //本地方法声明
  7.     native void printHello();
  8.     native void printString(String str);
  9.     //加载库
  10.     static { System.loadLibrary("hellojni");}
  11.     
  12.     public static void main(String[] args) {
  13.         // TODO Auto-generated method stub
  14.         HelloJNI myJNI = new HelloJNI();
  15.         //调用本地方法
  16.         myJNI.printHello();
  17.         myJNI.printString("Hello World from printString fun");

  18.     }

  19. }

2、  编译 HelloJNI.java 生成HelloJNI.class

D:\Users\lusi\JNI\JNI-1>  Javac  HelloJNI.java

3、
 生成C语言头文件 HelloJNI.h

D:\Users\lusi\JNI\JNI-1>  Javah HelloJNI

如果程序有包的话要在类的前面加上包名 比如Javah  com.pocket.HelloJNI

点击(此处)折叠或打开

  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class HelloJNI */

  4. #ifndef _Included_HelloJNI
  5. #define _Included_HelloJNI
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10.  * Class: HelloJNI
  11.  * Method: printHello
  12.  * Signature: ()V
  13.  */
  14. JNIEXPORT void JNICALL Java_HelloJNI_printHello
  15.   (JNIEnv *, jobject);

  16. /*
  17.  * Class: HelloJNI
  18.  * Method: printString
  19.  * Signature: (Ljava/lang/String;)V
  20.  */
  21. JNIEXPORT void JNICALL Java_HelloJNI_printString
  22.   (JNIEnv *, jobject, jstring);

  23. #ifdef __cplusplus
  24. }
  25. #endif
  26. #endif

4、  编写C程序 hellojni.c


点击(此处)折叠或打开

  1. #include "HelloJNI.h"
  2. #include <stdio.h>

  3. //添加名称为env与obj的两个参数
  4. JNIEXPORT void JNICALL Java_HelloJNI_printHello(JNIEnv *env, jobject obj)
  5. {
  6.     printf("Hello World!\n");
  7.     return;
  8. }
  9. JNIEXPORT void JNICALL Java_HelloJNI_printString(JNIEnv *env, jobject obj, jstring string)
  10. {
  11.     const char **str = (*env)->GetStringUTFChars(env, string, 0);
  12.     printf("%s!\n");

  13.     return;
  14. }

5、  生成C共享库 hellojni.dll

D:\Users\lusi\JNI\JNI-1> cl -I "D:\Program Files\Java\jdk1.8.0_25\include" -I "D

\Program Files\Java\jdk1.8.0_25\include\win32" -LD hellojni.c -Fejnifunc.dll

6、  执行Java程序

D:\Users\lusi\JNI\JNI-1> java HelloJNI












阅读(1343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~