Wie kann ich benutzerdefinierte .lib/.dll-Funktionen mit JNA zugreifen? Kann jemand ein Beispiel geben?Verwenden von JNA zum Verknüpfen mit benutzerdefinierter DLL
Vielen Dank.
Wie kann ich benutzerdefinierte .lib/.dll-Funktionen mit JNA zugreifen? Kann jemand ein Beispiel geben?Verwenden von JNA zum Verknüpfen mit benutzerdefinierter DLL
Vielen Dank.
Beispiel (from Wikipedia):
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Native;
/** Simple example of Windows native library declaration and usage. */
public class BeepExample {
public interface Kernel32 extends StdCallLibrary {
// FREQUENCY is expressed in hertz and ranges from 37 to 32767
// DURATION is expressed in milliseconds
public boolean Beep(int FREQUENCY, int DURATION);
public void Sleep(int DURATION);
}
public static void main(String[] args) {
Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32",
Kernel32.class);
lib.Beep(698, 500);
lib.Sleep(500);
lib.Beep(698, 500);
}
}
In diesem Fall haben wir es aus der "kernel32.dll" Bibliothek laden. Ich hoffe, das macht JNA klarer.
BEARBEITEN: Ich erkläre den Code: Sie müssen eine Schnittstelle (die com.sun.jna.Library erweitert) mit den Funktionen, die Sie benötigen, aus der Bibliothek definieren. Rufen Sie dann com.sun.jna.Native.loadLibrary ("LibraryName", InterfaceName.class) auf. Speichern Sie abschließend die Ausgabe in einer Variablen mit dem Typ der Schnittstelle. Rufen Sie einfach die Funktionen von dieser Variable.
Sie sollten StdCallLibrary für das angegebene Beispiel erweitern. Ob es für die benutzerdefinierte Bibliothek des Benutzers gilt oder nicht, hängt davon ab, welche Aufrufkonvention diese Bibliothek verwendet. – technomage
wie Pfad für meine benutzerdefinierte dll ich meine, wenn meine dll irgendwo in e:/Mydll liegt. dann, wie man den Pfad zur Verfügung stellt und wenn Mydll mit einer anderen DLL und Bibliothek gemacht, dann muss ich Pfad für diese DLL auch irgendwo zur Verfügung stellen? – Jony