4

dll メソッドを呼び出す必要があり、dll のソース コードがありません。JNI について読んでいて、コード (.h) に JNI ライブラリを入力するためのソースが必要であることを理解しました。

私の 2 回目の撮影は JNA ですが、DLL で何も変更する必要はありませんが、同じエラーが発生します。

テスト用に 2 つのクラスを作成しました。

インターフェース:

package icom;

import com.sun.jna.Library;

public interface IConectorT extends Library {
    int StartConector(byte[] conectorStatus, String icomPath);
}

DLL メソッド呼び出し:

package icom;

import com.sun.jna.Native;

public class ConectorTJna {

    public static void main(String args[]) {

        IConectorT lib = (IConectorT) Native.loadLibrary("ConectorT", IConectorT.class);
        int teste = lib.StartConector(null, "C:\\ICOM");
        System.out.println("RESULT: " + teste);
    }
}

メソッドを呼び出すと、次のlib.StartConectorようになります。

スレッド「メイン」での例外 java.lang.UnsatisfiedLinkError: 関数 'StartConector' の検索中にエラーが発生しました: 指定されたプロシージャが見つかりませんでした。com.sun.jna.Function.(Function.java:179) com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:350) com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:330) com.sun.jna.Library$Handler.invoke(Library.java:203) で $Proxy0.StartConector(不明なソース) で icom.ConectorTJna.main(ConectorTJna.java:10) で

4

1 に答える 1

1

システムプロパティを使用するなど、ライブラリへのパスを指定しましたか?

「JNA入門」ガイドの詳細は次のとおりです。

ターゲットライブラリをJavaプログラムで使用できるようにします。これを行うには2つの方法があります。

  1. 推奨される方法は、jna.library.pathシステムプロパティをターゲットライブラリへのパスに設定することです。このプロパティは java.library.pathに似ていますが、JNAによってロードされたライブラリにのみ適用されます。

  2. VMを起動する前に、適切なライブラリアクセス環境変数を変更してください。これは、WindowsではPATH、Linuxでは LD_LIBRARY_PATH、OSXではDYLD_LIBRARY_PATHです。

取得元:https ://github.com/twall/jna/blob/master/www/GettingStarted.md

于 2012-08-13T21:29:56.807 に答える