首先,先感谢三位版主的支持和帮助!
其次,我觉得作为一个对编程充满热情的人应该勇敢的去探索和研究新的问题而不是回避它!
第三,我认为,全世界的技术应该实现资源共享!
第四,我个人的编程水平确实有限,但是我不会放弃成为一名出色的PROGRAMMER的理想.
第五,以下是我研究后的结论--有一定程度的错误--请各位见量和指教:大家一同进步,中国才有希望
1.用JAVA编写:
public class testdll
{
static
{
System.loadLibrary("zuoye"); /*zuoye是所要调用的C/C++程序*/
}
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());
}
}
2.用C++编写testdll.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* 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
它是所调用C/C++的头文件!
3. 用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;
}
生成的是testdll.cpp
4.将zuoye用C++编译和运行一次---生成zuoye.exe
5.在VC++6.0内做以下动作:
a.新建->工程->Win32 Dynamic-Link Libary->工程名字zuoye
b.在此工程内添加testdll.h为C++头文件;testdll.cpp为C++源文件.
c.编译整个工程.
d.然后,将JAVA安装路径内INCLUDE内的JNI.H和JNI_MD.h添加到VC++6.0的安装路径的INCLUDE下;
e.将VC++6.0内的MYPROJECT中的ZUOYE内的ZUOYE.DLL放在testdll.java的目录下(两者同一个目录)
f.然后,运行testdll.java.
希望各位一起努力,不断完善和改进!
在JAVA中调用C/C++的技术