java - 关于在 OSGi 包中加载 DLL(使用 JNA)的问题

标签 java osgi jna

目前,我的 bundle 根目录下有 DLL 文件(rfid.dll;cpl.dll;rfidtx.dll;)。 我制作了一个实用程序包来保存 jna.jar,并将 com.sun.jna、com.sun.jna.ptr 作为服务导出。

相关 bundle 的 list 如下所示:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: ServiceImpl
Bundle-SymbolicName: osgi.mti.serviceImpl
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: ZTESOFT
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: osgi.mti.service,
 org.osgi.service.component;version="1.1.0",
 com.sun.jna,
 com.sun.jna.ptr
Service-Component: OSGI-INF/component.xml
Bundle-NativeCode: rfid.dll;cpl.dll;rfidtx.dll;
 osname=WindowsXP;
 processor=x86

在我的代码中,JNA 接口(interface)声明为:

   public interface CLibrary extends Library {

    CLibrary INSTANCE = (CLibrary) Native.loadLibrary("rfid",
            CLibrary.class);
   ............

}

当我运行时,会显示一些异常消息。根本异常是:

    java.lang.UnsatisfiedLinkError: Unable to load library 'rfid'

那么,我该如何解决这个问题呢?我希望有人能帮助我。

最佳答案

参见this现有问题进行深入解释。 JNA 不支持 OSGi,它本身使用 native 代码来加载库。显然,您可以预加载 native 库(让 OSGi 完成工作,因为它应该这样做),这将满足 JNA 的 native Hook 。然后,您应该能够通过您的服务使用 JNA 公开的 API。如果这有效,请报告 - 我已经非常成功地将“常规”JNI 与 OSGi 一起使用,并且还短暂尝试过使用 JNA,但由于其自己的加载器 Hook 而无处可去。

关于java - 关于在 OSGi 包中加载 DLL(使用 JNA)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473374/

相关文章:

java - 如何在 java 中使用 fiddler 捕获 https

java - maven-bundle-plugin 失败并显示 "Invalid class file module-info.class"

java - 用于自定义库的 JNA

java - 如何正确初始化 JNA 中 `Structure` 内的数组字段?

java - 在 Java 中调用 wait() 时,所有 Swing 框架都得到 "frozen"

java - 如何在java中使面板向左或向右滑动?

repository - 如何配置 Felix OBR 存储库列表?

java - 如何获取对 DLL 的 java JNA 调用以获取参数中返回的数据?

java - 自定义加密 GSM 通话

osgi - 在 bndtools 中,是什么导致生成执行环境的 Require-Capability header ?