动态链接库& Java的

时间:2012-09-27 01:41:05

标签: java dll java-native-interface dynamic-linking

我在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 :问题是,我将这些类添加到包中。当我将它们移动到默认包时,一切都很好。但是现在如果我想在不同的包中使用这个dll,我需要重建它。

Update2 :实际上我无法将它添加到包中,当我正在尝试时:#javah VolumeControl,我收到错误:

Could not find class file for 'VolumeControl'.

Update3 :我手动添加了包的名称到C ++函数,它可以正常工作。谢谢。

1 个答案:

答案 0 :(得分:0)

如果集成到makefile中,使用javah实用程序可能会有所帮助,以确保始终在双方(客户端/服务器)上假定接口。