以下文字为网络摘抄学习
我知道的有两种方法,一种是直接用JNI,另一种是则是用Jacob(实质上也用的是JNI)
先讲讲第一种方法
1.编写java程序TestDll,注意,这个类有两个作用,一个是用来做头文件,另外一个作用就是通过它来调用dll
public class TestDll {
static
{
System.loadLibrary("DLLSample");//载入dll
}
public native static int DoubleValue(int i);//函数声明
}
2.编译: javac TestDll
3.生成头文件: javah TestDll
生成TestDll.h文件,这里面只对函数DoubleValue作了声明
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h></jni.h>
/* Header for class TestDll */
#ifndef _Included_TestDll
#define _Included_TestDll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestDll
* Method: DoubleValue
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
4.用vc制作DLL
修改DLLSample工程,程序中添加函数DoubleValue的实现,函数名必须用jni规定格式,可以照到.h文件里的声
明来写:
#include "jni_md.h"
#include "TestDll.h"
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue (JNIEnv *, jclass, jint p)
{
int j = p*2;
return j;
}
JNIEXPORT,JNICALL,JNIEnv *, jclass请都不要动,jint对应是java里的int
别忘了把TestDll.h,jni.h(这个文件在jdk/include下),jni_md.h(这个文件在jdk/include/win32下)复制到VC
工程目录中,然后编译生成dll
5.把生成的DLLSample.dll复制到jdk/bin下(确保PATH指向了这个目录)
6.应用
我看到他们举的例子都是把调用写在了main里, 在这里我把应用取出来放在一个servlet类中的测试的,同样可
以得到正确结果,这里体现国TestDll的第二个作用,它是调用dll的一个纽带
......
TestDll td = new TestDll();
System.out.println("result= "+td.DoubleValue(25));
.....
注意:
如果更改了TestDll的内容或重使命名了这个文件,必须重新用它生成头文件,在dll里也要做相应修改,
因为必须要和java里面的声明一致才行
分享到:
相关推荐
在标题中提到的"JAVA-dll-ocx.rar"是一个压缩包,其中可能包含了示例代码和文档,用于演示如何在Java中调用DLL和OCX文件。"EdisonSmsGw.ocx"是特定的OCX控件,可能用于短信网关通信。这个控件可能是为了解决特定的...
java版本调用HP-Socket服务端代码,包含jna包及5.0.2版本的HP-Socket的dll文件,采用的是非常新的HP-Socket版本,demo是整套java工程,导入eclipse修改HpSocket.java文件中的服务器的IP和端口就可以测试,里面还包含...
5. **示例工程`demo-test-dll`**:这个压缩包可能包含了演示如何在Spring Boot中使用JNA调用DLL的示例代码。通常,这将包含Java类、配置文件以及可能的DLL文件。开发者可以通过阅读和运行这些示例来理解如何实现这一...
在Java中调用DLL(Dynamic Link Library)文件,可以使用Java的本地方法接口(JNI,Java Native Interface)来实现。JNI允许Java程序与本地代码进行交互,从而实现跨平台的功能。
- 需要注意C#和Java中的数据类型转换问题,特别是字符串类型的处理。 - 确保C++项目启用了CLR支持。 - JNA的配置与使用。 #### 第二种方法:Java利用Jacob进行调用 **背景介绍:** 另一种常见的方法是使用Java-...
本文将详细介绍如何在Java中调用DLL文件,并探讨几种常见的调用方法。 ### Java调用DLL的基本概念 在Java中调用DLL文件主要通过Java Native Interface (JNI)、JAWINJNative和JNA等技术来实现。这些技术允许Java...
使用JNA时,你只需要在Java中定义一个接口,这个接口映射到DLL中的函数即可。例如: ```java import com.sun.jna.Library; import com.sun.jna.Native; public interface MyDLL extends Library { MyDLL INSTANCE ...
你需要定义一个接口,该接口的每个方法对应DLL中的一个函数,然后使用`NativeLibrary`类加载DLL,并将接口实例化,这样就可以在Java中直接调用DLL函数了。 1. **基本数据类型**:JNA支持Java的基本数据类型如int、...
java调用sherpa-onnx 文字转换语音TTS 镜像部署直接调用,已经编译好相关文件和模型, sherpa-onnx 是一个基于下一代 Kaldi 和 onnxruntime 的开源项目,专注于语音识别、文本转语音、说话人识别和语音活动检测(VAD...
DLL(Dynamic Link Library)文件是Windows操作系统中一种重要的共享库,它包含了一组函数和资源,可供多个程序同时调用,以实现代码复用和优化系统性能。然而,DLL文件丢失或损坏是许多用户在使用计算机时遇到的...
总之,"sqlite-dll-win64-x64-3350100.zip"提供了在64位Windows系统上使用SQLite数据库的必要组件,特别适合于需要轻量级、本地存储数据的Java应用程序。通过正确配置和使用,可以方便地在Java环境中实现数据库操作...
在本篇文章中,我们将详细介绍如何使用 JAVA 调用 C# 编写的 DLL 文件。首先,我们需要了解什么是 DLL 文件,以及它在编程中的应用。 DLL 文件是一种动态链接库文件,它可以被多个程序同时使用,减少了代码的重复...
JNI接口包括了各种函数,让开发者可以在Java中声明本地方法,然后在本地代码中实现这些方法。 2. **创建Java接口** 在Java项目中,首先定义一个包含native关键字的方法。例如: ```java public class NativeDemo...
标题中的“JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用”涉及到的是Java平台下通过JNI(Java Native Interface)的两种实现方式,JNA(Java Native Access)和JNative,来与C/C++编写的动态链接库(DLL)进行交互...
Java调用DLL(动态链接库)是Java编程中的一项高级技术,主要应用于Java与本地代码交互,例如在Java中利用C++或C编写的库。本文将详细介绍如何使用Java调用DLL以及所需的必备jar包。 首先,Java并不直接支持DLL的...
Java调用C++ DLL文件是跨语言编程中的一个重要应用场景,特别是在既有Java代码库又有C++动态链接库的情况下。本文将详细讲解如何在Java程序中调用C++编写的DLL文件,以及一个可用的示例。 首先,理解Java与C++交互...
通过上述步骤,你可以在Java中成功地调用动态库DLL。不过,这种方式可能会增加项目的复杂性,且跨平台性较差。另一种选择是使用第三方库,如JNA(Java Native Access),它允许Java直接调用DLL,无需编写C/C++代码,...
这个实例是关于如何使用JNA来调用DLL(动态链接库)的教程,特别强调了在调用过程中可能出现的中文乱码问题以及如何解决这个问题。 首先,我们需要理解JNA的工作原理。JNA通过提供一个接口定义,让Java代码能够映射...
5. **调用本地方法**:在Java中,通过`java.lang.reflect.Method`的`invoke`方法调用JNI方法。 虽然JNA提供了更简单的接口,但在某些情况下,如果需要更高的性能或对本地代码的直接控制,JNative可能是更好的选择。...
在Java中,这种功能通常是通过JNI(Java Native Interface)实现的,它允许Java代码调用C、C++等本地代码,而DLL正是这些语言编译后的产物。下面我们将深入探讨这一主题。 首先,我们需要理解DLL是什么。DLL...