我在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 ++函数,它可以正常工作。谢谢。
答案 0 :(得分:0)
如果集成到makefile中,使用javah实用程序可能会有所帮助,以确保始终在双方(客户端/服务器)上假定接口。