各位大虾,在java中如何调用C的代码啊,高手们给个例子啊!先谢了!
解决方案 »
- 关于finally
- JSP(FORM表单提交然后如何判断年度是否存在)新手
- String 和 StringBuffer 仅仅是对字符串可以进行查找的区别吗?
- 如何利用JDBC捕获database的动态端口和静态端口
- [求助]jdk1.4.2与jre1.5冲突,注册表设置
- 我的Java -Version老是1.3,导致Eclips3.1不能使用,怎么解决?
- [GUI]JFrame最小化后,在任务栏区域高亮显示并闪烁
- 求java 项目!!!
- 怎么将控制台输入的字符串,切开,并且每个字符见添加空格
- 如何把一个String类型转化为TreePath类型,并在建立树后,展开指定位置?
- 高分相送,如何比较两时间的大小,谢谢啦!
- 请问java中有堆,堆栈这些概念吗??
jdk document里面有教程
java 代码
public class testdll {
static {
System.loadLibrary("CCtestdll");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args){
testdll test = new testdll();
test.set(13);
System.out.println(test.get());
}
}
c++
#include "testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass) {
return i;
}
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) {
i = j;
}
static {
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args) {
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}用javac testdll.java编译它,会生成testdll.class。
再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。 testdll.h文件的内容:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class testdll */
#ifndef _Included_testdll
#define _Included_testdll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: testdll
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);
/*
* Class: testdll
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
在具体实现的时候,我们只关心两个函数原型
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass); 和
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
用testdll.cpp文件具体实现这两个函数:
#include "testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass) {
return i;
}
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) {
i = j;
}用vc编译连接成库文件并生成DLL文件goodluck.dll 。把goodluck.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。