java调dll总是报错 这问题我提前还真遇到过,但是忘记怎么解决的了,我是按一个教程的方法做的,你可以在网上找,找不到就把邮件留这,我发你就是,按那个例子是能成功的,我在sun上用的,windows我没试。我同事试过也是成功的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Incorrect library name or library path. 能否给一个在vaj下调用dll的例子?多谢各位! 把dll放到你的working directory下 我这里有一个例子,你可以参考一下:在本实例中,包括下面几个类: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! 下面的怎么操作:使用Windows自带的c/c++编译器,编译上面的HelloNative.c:cl -Id:\j2sdk1.4.1\include -Id:\j2sdk1.4.1\include\win32 -LD HelloNative.c -FeHelloNative.dll to pm2357(学思不罔):在dos模式下敲入上面的命令,就能在当前目录生成HelloNative.dll文件了。 to Danger2000(飞鱼) :C:\>cl'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件。 哎呀,那里这么复杂啊,就是没找到DLL吧,你把它放到你的java.library.path里就行了(比如说system32目录),要看这个路径是哪里,可以用System.out.println(System.getProperties()); Danger2000(飞鱼)的是正确的,更多详细内容你可以查看java.sun.com中搜索JNI 如何实现文件加密 多线程依次输出的问题请教 枚举值中定义了方法如何使用 sql 正则表达式 如何在javabean中获取页面的内置对象application呢? 菜鸟问题:如何解开,或者查看*.jar的文件的内容? 怎样向一个文件内连续输入东西 这段代码的执行过程是如何的??结果是如何得来的?? 装了Tomcat 4.0.1,localhost:8080却出来3.2.3的画面? Java-多线程同步疑问 java怎么调用操作系统?比如能不能调用windows API?loadLibrary和load两个方法怎么调用动态库?谁能提供示例?谢谢 JAVA新手 进程问题
在本实例中,包括下面几个类:
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!
使用Windows自带的c/c++编译器,编译上面的HelloNative.c:
cl -Id:\j2sdk1.4.1\include -Id:\j2sdk1.4.1\include\win32 -LD HelloNative.c -FeHelloNative.dll
在dos模式下敲入上面的命令,就能在当前目录生成HelloNative.dll文件了。
C:\>cl
'cl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
System.out.println(System.getProperties());