请问Java中如何调用dll动态连接库? 好像不能直接调用吧。我只知道可以使用 JNI 来进行这样的任务,你可以看看 Java 文档上面关于JNI 的描述。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我这里有一个例子,通过JNI调用dll。在本实例中,包括下面几个类:HelloNative.java:实用类,提供一个静态本地方法greeting(),打印出一个消息串。其中greeting方法调用了下面的本地代码。HelloNative.c:本地实现代码。HelloNativeTest.java:应用主文件,调用HelloNative实用类的greeting()方法。//:HelloNative.javaclass HelloNative { public native static void greeting(); static { //HelloNative是下面将由HelloNative.c生成的dll文件。 System.loadLibrary("HelloNative"); }};编译上面的.java文件后,在生成的.class目录下,使用javah命令生成HelloNative.class的C头文件:javah HelloNative 生成的HelloNative.h文件如下:/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloNative */#ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern "C" {#endif/* * Class: HelloNative * Method: greeting * Signature: ()V */JNIEXPORT void JNICALL Java_HelloNative_greeting (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif拷贝生成的HelloNative.h,另存为HelloNative.c,并填充JNICALL Java_HelloNative_greeting方法体,得到下面的HelloNative.c文件//HelloNative.c/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloNative */#ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern "C" {#endif/* * Class: HelloNative * Method: greeting * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloNative_greeting (JNIEnv * env, jclass cl){ printf("Hello, Native World!\n"); } #ifdef __cplusplus } #endif #endif使用Windows自带的c/c++编译器,编译上面的HelloNative.c:cl -Id:\j2sdk1.4.1\include -Id:\j2sdk1.4.1\include\win32 -LD HelloNative.c -FeHelloNative.dll执行这条命令后将生成HelloNative.dll文件。这个DLL动态链接库就是下面我们在HelloNative.java文件中调用的本地文件。如果是在Unix/Linux下,请使用相应操作系统的c编译器,生成的库文件是HelloNative.so。(这里jdk的安装路径为d:\j2sdk1.4.1)至此,Windows平台上的本地库文件和Java文件已经准备就绪,下面写一个简单的测试程序来测试一下本地调用吧。//: HelloNativeTest.javaclass HelloNativeTest { public static void main(String[] args) { HelloNative.greeting(); }}编译、运行这个程序,将打印出Native版的:Hello, Native World! 跪求大家,帮我看看这个问题,谢谢!!!!!!!!!!!!!http://expert.csdn.net/Expert/topic/2633/2633574.xml?temp=.6377375 去看看这个http://expert.csdn.net/Expert/topic/2644/2644551.xml?temp=8.800685E-03 java 获取NTP时间 关于字符编码的疑问 HTML自定义右键的菜单 关于JAVA静态字符串数组动态分配的问题 异常与if判断语句的区别和用途? 如何在java中实现像c++的cin呀? 大家好 如何得到从键盘的输入的字符串!小问题!写代码给分! 用过freejava工具的高手,请进!!!!!!!!!! java 中的yield()方法为什么有时候不会让出cpu? 一个Socket的问题 怎么判断SQL中的Connection对象已经断连?
HelloNative.java:实用类,提供一个静态本地方法greeting(),打印出一个消息串。其中greeting方法调用了下面的本地代码。
HelloNative.c:本地实现代码。
HelloNativeTest.java:应用主文件,调用HelloNative实用类的greeting()方法。//:HelloNative.java
class HelloNative {
public native static void greeting();
static {
//HelloNative是下面将由HelloNative.c生成的dll文件。
System.loadLibrary("HelloNative");
}
};编译上面的.java文件后,在生成的.class目录下,使用javah命令生成HelloNative.class的C头文件:
javah HelloNative 生成的HelloNative.h文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: greeting
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_greeting
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif拷贝生成的HelloNative.h,另存为HelloNative.c,并填充JNICALL Java_HelloNative_greeting方法体,得到下面的HelloNative.c文件
//HelloNative.c
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: greeting
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_greeting (JNIEnv * env, jclass cl){
printf("Hello, Native World!\n");
}
#ifdef __cplusplus
}
#endif
#endif使用Windows自带的c/c++编译器,编译上面的HelloNative.c:cl -Id:\j2sdk1.4.1\include -Id:\j2sdk1.4.1\include\win32 -LD HelloNative.c -FeHelloNative.dll执行这条命令后将生成HelloNative.dll文件。这个DLL动态链接库就是下面我们在HelloNative.java文件中调用的本地文件。如果是在Unix/Linux下,请使用相应操作系统的c编译器,生成的库文件是HelloNative.so。(这里jdk的安装路径为d:\j2sdk1.4.1)至此,Windows平台上的本地库文件和Java文件已经准备就绪,下面写一个简单的测试程序来测试一下本地调用吧。
//: HelloNativeTest.java
class HelloNativeTest {
public static void main(String[] args) {
HelloNative.greeting();
}
}
编译、运行这个程序,将打印出Native版的:
Hello, Native World!
http://expert.csdn.net/Expert/topic/2644/2644551.xml?temp=8.800685E-03