Java中通过JNI调用C函数的的过程.docx
文本预览下载声明
Java中通过JNI调用C函数的过程编写Java代码 HelloJNI.Javapublic class HelloJNI {/** * @param args *///本地方法声明native void printHello();native void printString(String str);//加载库static { System.loadLibrary(hellojni);}public static void main(String[] args) {// TODO Auto-generated method stubHelloJNI myJNI = new HelloJNI();//调用本地方法myJNI.printHello();myJNI.printString(Hello World from printString fun);}}编译 HelloJNI.java 生成HelloJNI.classD:\Users\lusi\JNI\JNI-2Javac HelloJNI.java生成C语言头文件 HelloJNI.hD:\Users\lusi\JNI\JNI-2Javah HelloJNI如果程序有包的话要在类的前面加上包名比如Javah com.pocket.HelloJNI/* DO NOT EDIT THIS FILE - it is machine generated */#include jni.h/* Header for class HelloJNI */#ifndef _Included_HelloJNI#define _Included_HelloJNI#ifdef __cplusplusextern C {#endif/* * Class: HelloJNI * Method: printHello * Signature: ()V */JNIEXPORT void JNICALL Java_HelloJNI_printHello (JNIEnv *, jobject);/* * Class: HelloJNI * Method: printString * Signature: (Ljava/lang/String;)V */JNIEXPORT void JNICALL Java_HelloJNI_printString (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif编写C程序 hellojni.c#include HelloJNI.h#include stdio.h//添加名称为env与obj的两个参数JNIEXPORT void JNICALL Java_HelloJNI_printHello(JNIEnv *env, jobject obj){ printf(Hello World!\n); return;}JNIEXPORT void JNICALL Java_HelloJNI_printString(JNIEnv *env, jobject obj, jstring string){ const char **str = (*env)-GetStringUTFChars(env, string, 0); printf(%s!\n); return;}生成C共享库 hellojni.dllD:\Users\lusi\JNI\JNI-2cl -I D:\Program Files\Java\jdk1.8.0_25\include -I D\Program Files\Java\jdk1.8.0_25\include\win32 -LD jnifunc.cpp -Fejnifunc.dll执行Java程序D:\Users\lusi\JNI\JNI-2 java HelloJNI
显示全部