JAVA Application 怎么调用其他程序写的.DLL动态连接库????

100度泡腾 2005-07-21 02:29:56
请问在 JAVA Application 怎么调用其他程序写的.DLL动态连接库????请给实例说明,谢谢!

小弟在线等,来者给分。
...全文
143 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
thfbxp 2005-07-25
  • 打赏
  • 举报
回复
你必须装vc6。0才行。
thfbxp 2005-07-25
  • 打赏
  • 举报
回复
在本实例中,包括下面几个类:
HelloNative.java:实用类,提供一个静态本地方法greeting(),打印出一个消息串。其中greeting方法调用了下面的本地代码。
HelloNative.c:本地实现代码。
HelloNativeTest.java:应用主文件,调用HelloNative实用类的greeting()方法。
HelloNative.java


//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

生成的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.c
拷贝生成的HelloNative.h,另存为HelloNative.c,并填充JNICALL Java_HelloNative_greeting方法体,得到下面的
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。
开始运行吧

至此,我们编写的Windows平台上的本地库文件和Java文件已经准备就绪,下面写一个简单的测试程序来测试一下本地调用吧。


class HelloNativeTest
{
public static void main(String[] args)
{
HelloNative.greeting();
}
}
编译、运行这个程序,将打印出Native版的:
Hello, Native World!

也许你认为这并没有什么特别,但如果你知道这个消息串是使用你自己写的C库文件中调用生成的时候,你就会有知道这有着非常重大的意义。就好像寻宝者在人迹罕至的荒山之中,突然看到一块史前陶片,陶片本身并没有什么特别,但这,也许已经为你启开了宝藏之门。

hujiaboy 2005-07-24
  • 打赏
  • 举报
回复
一、JAVA中所需要做的工作
  在JAVA程序中,首先需要在类中声明所调用的库名称,如下:
static {
System.loadLibrary(“goodluck”);
}

  在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。

  还需对将要调用的方法做本地声明,关键字为native。且只需要声明,而不需要具体实现。如下:
public native static void set(int i);
public native static int get();

  然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

.
.
.
.


http://www.pconline.com.cn/pcedu/empolder/gj/java/0506/642328.html
autowind 2005-07-22
  • 打赏
  • 举报
回复
可以用jawin,搜索下很多资料和样例的。
zyxzyx10 2005-07-22
  • 打赏
  • 举报
回复
说来话长
allenchue 2005-07-22
  • 打赏
  • 举报
回复
Java Native Interface(JNI)
一门学问啊。可以看看Addison Welsey出版的The Java Native Interface书
glorywine 2005-07-22
  • 打赏
  • 举报
回复
native method就可以用来实现
网上很多的
搜索一下看
huangdeji 2005-07-21
  • 打赏
  • 举报
回复
小弟在线帮你顶。
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧