可以考虑使用JNI。
分两种情况:
1、如果你已经有一个DLL了,需要在Java中使用:
可以先在Java中声明相应的方法,然后生成.h,
再依据.h新建一个DLL调用旧的DLL中的东东
2、如果没有DLL,则好办:
可以先在Java中声明相应的方法,然后生成.h,
再依据.h新建一个DLL具体操作过程可以参考下面的东东://JNI-使用JNI调用dll.txt假定工作目录在:F:\java\
假定使用VC作编译器1、源代码:
//:testdll.javapublic class testdll {
static {
System.loadLibrary("testdll");
} 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、使用javah:
javah testdll
则会在当前目录下生成F:\java\testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。
内容如下:
/* 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
#endif3、
对于已生成的f:\java\testdll.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。
然后编译连接成库文件即可。
再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。 4、testdll.cpp文件具体实现这两个函数:
a、在vc中新建...-工程-Win32 Dynamic-Link Library,输入相关信息(工程名为testdll)
b、新建...-文件-C++Source Files,输入相关信息(文件名为testdll)
c、输入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;
}
d、编译之前,需要设置工具-选项-Directories(Platform:Win32 Show directories for:Include files),加入三个目录:
F:\J2SDK1.4.1-01\INCLUDE
F:\J2SDK1.4.1-01\INCLUDE\WIN32
F:\JAVA(此目录即testdll.h所在的目录)5、编译连接成库文件,本例是在WINDOWS下做的,生成的是testdll.DLL文件。
并且名称要与JAVA中需要调用的一致,这里就是testdll.dll 6、把testdll.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。
分两种情况:
1、如果你已经有一个DLL了,需要在Java中使用:
可以先在Java中声明相应的方法,然后生成.h,
再依据.h新建一个DLL调用旧的DLL中的东东
2、如果没有DLL,则好办:
可以先在Java中声明相应的方法,然后生成.h,
再依据.h新建一个DLL具体操作过程可以参考下面的东东://JNI-使用JNI调用dll.txt假定工作目录在:F:\java\
假定使用VC作编译器1、源代码:
//:testdll.javapublic class testdll {
static {
System.loadLibrary("testdll");
} 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、使用javah:
javah testdll
则会在当前目录下生成F:\java\testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。
内容如下:
/* 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
#endif3、
对于已生成的f:\java\testdll.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。
然后编译连接成库文件即可。
再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。 4、testdll.cpp文件具体实现这两个函数:
a、在vc中新建...-工程-Win32 Dynamic-Link Library,输入相关信息(工程名为testdll)
b、新建...-文件-C++Source Files,输入相关信息(文件名为testdll)
c、输入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;
}
d、编译之前,需要设置工具-选项-Directories(Platform:Win32 Show directories for:Include files),加入三个目录:
F:\J2SDK1.4.1-01\INCLUDE
F:\J2SDK1.4.1-01\INCLUDE\WIN32
F:\JAVA(此目录即testdll.h所在的目录)5、编译连接成库文件,本例是在WINDOWS下做的,生成的是testdll.DLL文件。
并且名称要与JAVA中需要调用的一致,这里就是testdll.dll 6、把testdll.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。
我在C:\temp\testhasp目录下已经有了HaspDLLProxy.dll文件(这个文件是按JNI的方法来生成的库文件)我现在想在JAVA下使用这个库中的某一个方法,我要如何用?
当我用javah testdll时出现Class test could not be found