Я сделал DLL в C++ и написал этот класс в Java:Dynamic Link Library & 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++, и он работает. Благодарю.
Посмотрите эту статью http://stackoverflow.com/questions/1358541/jni-hello-world-unsatisfied-link-error на UnsatisfiedLinkError. Я думаю, это поможет. –
Привет. Проблема в том, что когда я пытаюсь вызывать Mute() из класса Server, но если я поместил этот класс в класс VolumeControl, он работает хорошо. – Michael