Praktikum 13: Java Native Access Aufgabe 1: Aufruf einer

Werbung
INE2 – Informatik für Ingenieure 2
Praktikum 13:
Java Native Access
Aufgabe 1: Aufruf einer Betriebssystem Funktion
Das Betriebssystem ist über DLL Aufrufe direkt ansprechbar; das beinhaltet auch Funktionen, die
in Java nicht über die Klassenbibliothek verfügbar sind. Eine dieser Funktionen ist das Sperren
des Computers
Aufgabe: Sperren Sie Ihren Zugriff auf ihren Computer
Hinweise:
•
•
•
Entsprechende Vorlesungsfolie
Das jna-4.1.0.jar File finden Sie in ihrem arduino/lib Verzeichnis oder im Internet.
Es muss als zusätzliche Bibliothek im Java Projekt angegeben werden.
Aufgabe 2: Zugriff auf die C Ranglisten DLL
Die Rangliste, die als C DLL entwickelt wurde soll via Java Zugegriffen werden. Für diesen
Zweck muss zuerst das Teilnehmer struct
typedef struct {
char name[20];
int h, min, sec;
} Teilnehmer;
die entsprechende Java Datenstruktur sieht folgendermassen aus.
public class Teilnehmer extends Structure {
public byte[] name = new byte[20];
public int h;
public int min;
public int sec;
}
Du C Funktionen der DLL haben folgende Signatur
void teilnehmerLaden(char* filename, int *maxT, Teilnehmer zeiten[]);
void teilnehmerSpeichern(char* filename, int maxT,
Teilnehmer zeiten[]);
void teilnehmerSortieren(int size, Teilnehmer zeiten[]);
Diese werden wie folgt in Java abgebildet
void teilnehmerLaden(String filename,
IntByReference maxT, Teilnehmer[] zeiten);
void teilnehmerSpeichern(String filename,
int maxT, Teilnehmer[] zeiten);
Karl Rege, Gerrit Burkert, 23.05.16
1
INE2 – Informatik für Ingenieure 2
void teilnehmerSortieren(int size, Teilnehmer[] zeiten);
Der Array von Teilnehmer muss vor der Übergabe noch in einen zusammenhängenden Memory
Block kopiert werden, was die Hilfsmethode toContinuousArray übernimmt.
Teilnehmer[] tn = Teilnehmer.toContinuousArray(myArray);
Der Pointer zu einem int wird duch einen IntByRefernce repräsentiert.
Das fertige JNA Interface sieht wie folgt aus:
public interface RanglisteModel extends Library {
RanglisteModel INSTANCE = (RanglisteModel)
Native.loadLibrary("libRanglisteModel"
,RanglisteModel.class);
// void printf(String format, Object... args);
void teilnehmerLaden(String filename,
IntByReference maxT, Teilnehmer[] zeiten);
void teilnehmerSpeichern(String filename,
int maxT, Teilnehmer[] zeiten);
void teilnehmerSortieren(int size, Teilnehmer[] zeiten);
}
Der Aufruf via sieht dann wie folgt aus:
final int SIZE = 100;
Teilnehmer[] myArray = new Teilnehmer[SIZE];
myArray[0] = new Teilnehmer("hugo",4,3,1);
Teilnehmer[] tn = Teilnehmer.toContinuousArray(myArray);
RanglisteModel.INSTANCE.teilnehmerSpeichern("c:\\tmp\\t.txt",
tn.length,tn);
Aufgabe: erstellen Sie eine Rangliste mit 3 Elementen; sortieren Sie diese und speichern Sie die
sortierte Rangliste ab..
Hinweise:
•
•
Die libRanglisteModel-DLL muss sich im build/classes Verzeichnis Ihres Projekts befinden
und muss den angegebenen Namen haben
Das LIB File wird nicht benötigt
Karl Rege, Gerrit Burkert, 23.05.16
2
Herunterladen