java 调用c/c++

 



第一步:

编写java程序:如--

public class Pxy {
static{
//加载动态库
System.loadLibrary("pxy");
}
//此方法不用再java中实现
 //这里定义的函数我们是希望它能
//在C++中运行--提高程序的效率
// 方法set 是初始化两个参数

public native static  void set(int a,int b);
//计算两个参数的和
public native static int sum();
//从其他地方返回字符串
public native static void setString(String s);
public native static void getString();
public static void main(String[] args){
Pxy p = new Pxy();
p.set(12, 9);
System.out.println("The Result is "+p.sum());
p.getString();
}

}


第二部:

创建一个c/c++的运用程序的头文件

在自己的目录--cmd 进行编写

如:进到自己的类文件中(.class)

用javah 类名

编译成功后:

第三部:

把相应的头文件放进自己的Vc++开发环境的include包中--在后面需要用到 还有jdk 中inclue中 jni.h 和include的其他两个头文件。


第四部:进行编写c/c++项目

你可以打开刚刚你生成的头文件--里面有相应的信息--如我的

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

#ifndef _Included_Pxy
#define _Included_Pxy
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Pxy
 * Method:    set
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_Pxy_set
  (JNIEnv *, jclass, jint, jint);

/*
 * Class:     Pxy
 * Method:    sum
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_Pxy_sum
  (JNIEnv *, jclass);

/*
 * Class:     Pxy
 * Method:    setString
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_Pxy_setString
  (JNIEnv *, jclass, jstring);

/*
 * Class:     Pxy
 * Method:    getString
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Pxy_getString
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif
----------------------------------------

在编写c/c++程序中--你就要根据自己的需要,把相应的函数进行实现。

如我实现了:

#include "Pxy.h"
int i=0,j=0;
JNIEXPORT void JNICALL Java_Pxy_set(JNIEnv *, jclass, jint a, jint b){
i=a;j=b;

}
JNIEXPORT jint JNICALL Java_Pxy_sum(JNIEnv *, jclass){
return i+j;
}
JNIEXPORT void JNICALL Java_Pxy_getString(JNIEnv *, jclass){
printf("\n");
printf("我的名言:风雨无阻--艳丽人生");
return ;
}

这几个方法----

--------------------------------




------------------------------

这已经成功。