当前位置: 技术问答>java相关
在java里如何调用DLL
来源: 互联网 发布时间:2015-04-21
本文导语: 如题 | 这样是不行的。 不能直接调用原有的DLL 只能通过重新封装一个DLL来调用。 调用过程大概如下 nativefunction->yourDLL function->your oldDll function 举个简单例子: 你想调用一个原有DLL中的一个函数void fun...
如题
|
这样是不行的。
不能直接调用原有的DLL
只能通过重新封装一个DLL来调用。
调用过程大概如下
nativefunction->yourDLL function->your oldDll function
举个简单例子:
你想调用一个原有DLL中的一个函数void fun1();
你需要在你的Java程序中产生一个类如
class A{
public native void fun1();
}
编译你的A.java: javac A.java
产生JNI头文件:javah -jni A
你会发现在当前目录中有个头文件A.h
打开该文件你会发现有个函数申明如:
JNIEXPORT void JNICALL Java_A_fun1(JNIEnv *, jclass);
你重新产生一个DLL工程,把这个头文件加入,并实现方法 Java_A_fun1(JNIEnv *, jclass);
在该函数的实现中调用原有DLL中的函数fun1()
在你的Java程序System.loadLibrary("yourlib")中那个DLL名字应该是你
产生的那个DLL的名字。
具体的细节请参看JNI文档。
这是Java调用原有DLL的唯一方法,虽然多了一层调用。
不能直接调用原有的DLL
只能通过重新封装一个DLL来调用。
调用过程大概如下
nativefunction->yourDLL function->your oldDll function
举个简单例子:
你想调用一个原有DLL中的一个函数void fun1();
你需要在你的Java程序中产生一个类如
class A{
public native void fun1();
}
编译你的A.java: javac A.java
产生JNI头文件:javah -jni A
你会发现在当前目录中有个头文件A.h
打开该文件你会发现有个函数申明如:
JNIEXPORT void JNICALL Java_A_fun1(JNIEnv *, jclass);
你重新产生一个DLL工程,把这个头文件加入,并实现方法 Java_A_fun1(JNIEnv *, jclass);
在该函数的实现中调用原有DLL中的函数fun1()
在你的Java程序System.loadLibrary("yourlib")中那个DLL名字应该是你
产生的那个DLL的名字。
具体的细节请参看JNI文档。
这是Java调用原有DLL的唯一方法,虽然多了一层调用。