1

現在、バンドルのルートに DLL ファイル (rfid.dll;cpl.dll;rfidtx.dll;) があります。jna.jar を保持するユーティリティ バンドルを作成し、com.sun.jna、com.sun.jna.ptr をサービスとしてエクスポートします。

問題のバンドルのマニフェストは次のようになります。

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 インターフェイスは次のように宣言されています。

   public interface CLibrary extends Library {

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

}

実行すると、いくつかの例外メッセージが表示されます。根本的な例外は次のとおりです。

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

では、どうすればこの問題を解決できますか? 誰かが私を助けてくれることを願っています。

4

1 に答える 1

1

詳細な説明については、この既存の質問を参照してください。JNAはOSGiに対応しておらず、それ自体がネイティブコードを使用してライブラリをロードします。どうやら、ネイティブライブラリをプリロードして(OSGiに作業を任せる)、JNAのネイティブフックを満たすことができるようです。これで、サービスを通じてJNAに公開されたAPIを使用できるようになります。これが機能するかどうかを報告してください-私はOSGiで「通常の」JNIを非常にうまく使用し、JNAを簡単に使用しようとしましたが、独自のローダーフックのためにどこにも行きませんでした。

于 2010-08-22T07:50:00.060 に答える