Java调用DLL方法详解
"Java调用DLL是将Java代码与Windows平台下的动态链接库(DLL)进行交互的技术。本文档提供了一种使用Java Native Interface (JNI) 和VB DLL(通过Jacob库)来实现这一过程的方法。" 在Java中调用DLL通常涉及到以下几个关键步骤: 1. 创建Java接口:首先,你需要在Java类中定义一个静态块来加载DLL库。例如,创建一个名为`javacall`的Java类,并在静态块中使用`System.loadLibrary()`方法加载DLL库,如"calldll"。此外,还需要定义一个native方法,该方法将在DLL中实现。比如,定义一个名为`callcount`的native方法,接收一个整型参数并返回一个整型结果。 ```java public class javacall { static { System.loadLibrary("calldll"); } public native static int callcount(int i); public static void main(String[] args) { javacall jc = new javacall(); int j; j = jc.callcount(10); System.out.println(j); } } ``` 2. 生成头文件:使用`javah`工具,从编译后的Java类文件(如`javacall.class`)生成C或C++的头文件,这里生成的是`javacall.h`。这将包含Java native方法的声明,可以被C/C++代码引用。 ```bash D:\AdamSoft\batool-g\java_call_dll_for_example>javah javacall ``` 3. 编写C/C++代码:利用生成的头文件,用C或C++编写实际的DLL实现。例如,使用Visual Studio创建一个Win32 DLL项目,选择DLL类型,并实现`javacall.h`中声明的函数。这通常包括处理JNI调用,以及调用DLL的实际功能。在示例中,`calldll.cpp`包含了`DllMain`函数以及对`callcount`的实现。 ```cpp // calldll.cpp: 定义DLL应用程序的入口点。 #include "stdafx.h" #include "javacall.h" BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { // ... } JNIEXPORT jint JNICALL Java_javacall_callcount(JNIEnv *env, jclass clazz, jint i) { // 实现callcount的逻辑 } ``` 4. 编译和链接DLL:使用C/C++编译器(如Visual C++),编译并链接源代码,生成DLL文件。确保正确设置所有依赖项和库路径。 5. 测试和运行:最后,你可以通过运行Java程序来测试DLL的调用。Java程序会加载DLL,并通过JNI调用在DLL中的方法。 这种Java调用DLL的方法适用于需要利用已有的Windows库或需要与本地系统服务进行交互的情况。不过,需要注意的是,这种方式增加了代码的复杂性,可能会带来跨平台问题,因为DLL是特定于Windows的。如果需要跨平台兼容,可以考虑使用Java的其他技术,如Java的Socket通信或者使用纯Java的库来实现相同功能。
java调用vc dll、vb dll(Com 组件) (2009-12-04 18:26)
分类: JAVA语言
**********************************************
** 文章名称:java调用vc dll、vb dll(Com 组件)
** 版权信息:可以任意转载,但要注明出处及作者信息
** 作 者: 隗公万
** 时 间: 2009.12.04
** 联系方式:weigongwan@gmail.com
***********************************************/
一、简单说明
java调用动态库其实都是需要通过一些辅助的组件,java调用vc的动态库一般是用JNI,而java调用vb的动态库更确切的说是调用vb的Com组件则是用的jacob了。本人也是班门弄斧,想鄙视我的就鄙视吧,呵呵
二、java调用vc动态库
1、首先,写出java的调用程序,例子代码如下(javacall.java):
public class javacall
{
static
{
System.loadLibrary("calldll");
}
public native static int callcount(int i);
public static void main(String[] args)
{
int j;
j=jc.callcount(10);
System.out.println(j);
}
};
2、利用javacall.java文件生成javacall.class文件和javacall.h头文件。
D:\AdamSoft\batool-g\java_call_dll_for_example>javac javacall.java
D:\AdamSoft\batool-g\java_call_dll_for_example>javah javacall
D:\AdamSoft\batool-g\java_call_dll_for_example>
3、下面利用生成好的头文件来创建vc的动态库,直接在visual studio上面新建一个Win32 Application Wizard文件,Application type选择DLL,然后点击完成即可,source如下:
// calldll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "javacall.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
剩余7页未读,继续阅读
- 粉丝: 1
- 资源: 35
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全