1

私はC++でdllを作成し、Javaでこのクラスを作成しました。

public class VolumeControl {

    public native float GetVolume();

    public native void SetVolume(float val);

    public native void VolumeUp();

    public native void VolumeDown();

    public native void Mute();

    static {
         System.load("some_path/VolumeControl.dll");
    }
}

このファイルから関数を呼び出すとうまく機能しますが、これを実行しようとすると、次のようになります。

public class Server {

    public static void main(String[] args) {
        VolumeControl ctrl = new VolumeControl();
        ctrl.Mute();
    }
}

私はこれを手に入れます:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
RemoteControl.VolumeControl.Mute()V

もちろん、両方のクラスは同じパッケージに含まれています。どうすれば解決できますか?ありがとう。

Update1:​​OK問題は、これらのクラスをパッケージに追加したことです。それらをデフォルトのパッケージに移動すると、すべてが正常に機能します。しかし、このdllを別のパッケージで使用したい場合は、再構築する必要があります。

Update2:実際にパッケージに追加できません。試してみると:#javah VolumeControl、エラーが発生します:

Could not find class file for 'VolumeControl'.

Update3:パッケージの名前をC ++関数に手動で追加しましたが、機能します。ありがとう。

4

1 に答える 1

0

インターフェースが常に両側 (クライアント/サーバー) で想定されるようにするために、makefile に統合されている場合は、javah ユーティリティの使用が役立つ場合があります。

于 2012-10-19T15:41:03.987 に答える