2

JBuilder 6 デバッガで完全に動作する小さなテスト プログラムがあります。.jar ファイルを作成して実行すると、エラーが発生します

>java -jar testadll.jar
Start of DLL test
Exception in thread "main" java.lang.UnsatisfiedLinkError: jnidispatch (/com/sun
/jna/win32-x86/jnidispatch.dll) not found in resource path
    at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:708)
    at com.sun.jna.Native.loadNativeLibrary(Native.java:685)
    at com.sun.jna.Native.<clinit>(Native.java:109)
    at testadll.TestThisDLL$PenniesLib.<clinit>(TestThisDLL.java:24)
    at testadll.TestThisDLL.main(TestThisDLL.java:33)

ドライブを検索しましたが、jnidispatch.dll はありません。

プログラムは

package testadll;

import com.sun.jna.Library;
import com.sun.jna.Native;
//import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.win32.StdCallLibrary;
//import com.sun.jna.*;



public class TestThisDLL {
   public interface PenniesLib extends StdCallLibrary {
    PenniesLib INSTANCE = (PenniesLib) Native.loadLibrary(
            "PenniesLib", PenniesLib.class);
        int a();
    }

  public static void main( String args[] ) {
      System.out.println("Start of DLL test");
      //TestDLL t = new TestDLL();
      //System.out.println("DLL loaded");
      int value = PenniesLib.INSTANCE.a();
      System.out.println("DLL response is " + String.valueOf(value));
  }
}
4

2 に答える 2

4

JNA のクラスを独自の jar ファイルとマージしたようですが、ネイティブ サポートは省略されています。元のファイル(クラス ファイルだけでなく) のすべてのjna.jarファイルが新しい宛先にコピーされ、元のパスが保持されていることを確認します。

具体的には、jar ファイルに com/sun/jna/win32-x86/jnidispatch.dll を含める必要があります。他のプラットフォームのサポートを含める場合は、com/sun/jna/*/ jnidispatchも含める必要があります。

于 2013-06-27T15:06:36.437 に答える
0

jna-4.1.0.jar や jna-3.4.0.jar など、64 ビットをサポートするバージョンの jna.jar を使用する必要があります。

于 2015-03-30T14:31:55.670 に答える