请问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 哪个高手可以用QQ帮我解决点java问题 求教一个java和数据库交互的小程序 在不知表名,不知列名,只知道数据片段的情况查询数据!怎么查啊? java能实现什么窗口也不显示,只显示文字吗? httpclient不能访问 HttpURLConnection可以访问 校验地址问题,谁帮找找原因? eclipse帮助排版混乱现象解决办法 想做一个阈值控制,流量超过阈值就报警,什么方法比较简单。 wen ti jbulder的报错信息,如何解决 一个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