最近一个JSP项目需要用到分词模块,而分词模块实用C++写成的DLL库。于是上网搜各种方法,最后选择了JNA作为JSP调用DLL的工具。
JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。
JNA的使用方法有很多,这里只总结下我遇到的问题:
DLL放置的路径问题
JSP本身分为bean的src目录和WebRoot的脚本目录,而我们的DLL需要在src下的类中调用,于是遇到了将DLL和资源文件放置到什么地方的问题。
最后解决方法:将调用的DLL和LIB文件拷贝到C:/Windows/System32目录下可以访问。
解决过程:我试过将这些文件放到Src目录下,然后用Class.class.getResource("/").getPath()这种方法得到类的class路径,再得到资源文件的路径,结果没有成功。
DLL调用资源的路径问题
DLL可能会调用其他资源文件,比如我这里需要用到词典,路径也是个问题,不过这个较为简单,很容易解决:
将资源文件目录,拷贝到Src目录下面。在程序中使用Class.class.getResource("/").getPath()获得编译后的类所在的根目录,再连接上资源文件即可。
原文地址:http://www.crazyant.net/2012/12/26/jsp使用jna调用dll函数遇到的几个问题/
相关推荐
在“JNA调用DLL完整实例demo”中,我们首先需要创建一个Java接口,这个接口将代表DLL中的函数。例如,如果DLL中有一个名为`recvWork`的函数,我们的Java接口可能会这样定义: ```java public interface ...
本示例项目"JNA_Demo"应该包含了一些具体的DLL调用案例,通过阅读源码,你可以更深入地了解如何在不同情况下使用JNA调用DLL函数。实践是最好的老师,建议结合示例逐步学习和理解这些概念,以便在实际项目中灵活运用...
总之,"JNA调用DLL函数"这个主题涵盖了Java平台的本地调用能力,以及如何利用这种能力与C语言编写的动态链接库进行通信。这对于开发需要访问操作系统特定功能或者利用已有的C库的Java应用程序来说,是一项重要的技能...
总结来说,JNA调用DLL的关键步骤包括:定义DLL接口,加载DLL,调用DLL函数,并处理可能出现的编码问题。本实例提供了一个具体的应用场景,有助于理解JNA调用DLL的过程,并解决了常见的中文乱码问题。通过学习和实践...
了解这些概念和步骤后,开发者便能利用Java和Spring Boot通过JNA调用DLL函数,实现Java与本地库的高效交互。记得在实际项目中,安全性和稳定性是首要考虑的因素,需要对DLL的使用进行充分的测试和异常处理。
在使用JNA调用DLL的过程中,可能会遇到内存溢出的问题。这类问题通常发生在处理大量数据或长时间运行的应用场景中。为了避免这种情况,可以采取以下措施: - **优化数据结构**:合理设计数据结构,减少不必要的数据...
本实例将详细介绍如何使用JNA调用DLL动态链接库,通过一个超简单的Demo来展示其过程。 首先,我们需要了解JNA的基本工作原理。JNA通过映射Java方法到本地库中的函数,实现了跨语言的通信。在Java中,我们定义一个...
3. 调用DLL函数:在Java代码中,你可以像调用普通Java方法一样调用这些DLL函数。例如: ```java int result = DahuaSdk.INSTANCE.initSDK("192.168.1.64", 8000, "admin", "admin123"); if (result == 0) { System....
标题中的“最简单的JNA调用DLL”是指Java Native Access(JNA)库在Java程序中调用Windows Dynamic Link Library (DLL) 文件的一种基础方法。JNA是Java平台上的一个开源库,它允许Java代码与本地平台API进行交互,...
本篇文章将深入探讨如何使用JNA调用DLL(动态链接库)文件,以及在VS(Visual Studio)中创建DLL,并确保Java与DLL之间的兼容性。 首先,理解JNA的基本概念至关重要。JNA提供了一种抽象层,使得Java可以直接调用C...
在标题中提到的“jna调用C语言函数库dll、so例子”,这里的"dll"是Windows系统中的动态链接库(Dynamic Link Library),"so"则是Linux和其他类Unix系统中的共享对象(Shared Object)。这两种都是C语言或其他编译...
在Java编程环境中,有时我们需要与操作系统底层功能进行交互,例如调用C语言编写的动态链接库(DLL)函数。在这种情况下,Java Native ...JNA测试项目"JNATest"可能包含一个完整的示例,演示如何从Java调用DLL并运行。
在标题和描述中提到的“JNA调用dll jna调用c++”是指利用JNA来调用Windows系统中的动态链接库(.dll)文件,这些.dll文件通常由C++或其他支持编译为本地代码的语言编写。 本文将详细介绍如何使用JNA进行dll调用,并...
java后端springBoot框架使用jna调取C语言的dll接口(停车场道闸接口) 包含构造体的调用, 回调函数的调用,JNA和C / C ++的数据类型映射,Pointer类型的使用
在这个“JNA调用DLL简单示例”中,我们将探讨如何使用JNA来调用DLL中的函数。首先,我们需要了解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中的一种共享库,它包含可由多个程序同时使用的函数和资源...
通常,这可能是一个测试类或者包含主方法的Java文件,用于演示如何使用JNA调用DLL的具体代码。由于没有详细文件内容,我们将基于JNA的一般用法进行讨论。 在Java中使用JNA调用DLL的基本步骤如下: 1. **添加JNA库*...
你需要创建一个Java类实现这个接口,并指定它作为参数传递给DLL函数。例如,如果你有一个C++回调函数`void callback(int result)`,在Java中可以定义如下: ```java public class MyCallback implements Callback {...
在标题中提到的“JNA调用.dll文件或.so动态链接库的代码demo”,这是一个实际应用JNA来调用本地动态库的示例。下面我们将深入探讨JNA的工作原理、使用步骤以及如何处理.dll和.so文件。 1. **JNA工作原理**: JNA...
在压缩包中的`JNADemo`可能包含了上述步骤的一个示例代码,演示如何使用JNA调用DLL。为了更好地理解这个过程,建议打开并分析这个示例,查看它是如何定义接口、加载DLL以及调用具体函数的。 JNA的优势在于它的简洁...
4. **调用dll函数**:一旦接口被加载,就可以像调用普通Java方法一样调用dll的函数了。 ```java int result = MyDllLibrary.INSTANCE.someFunction(123, "Hello"); ``` 5. **类型映射**:JNA会自动处理基本类型...