Hallo,
ich habe ein kleinen Sensor, der Umgebungsparameter (Temperatur, Druck, usw.) ermitteln kann. Um die Werte auszulesen, habe ich eine DLL dazubekommen. Diese habe ich über JNA eingebunden, so wie es auch auf der Seite im Beispiel zu sehen ist. Diese DLL hat vier Funktionen: OpenComport, CloseComport, GetVersion, GetMeasuredValues. Alle Funktionen geben einen Integer zurück, dabei steht 0 (Null) für "hat funktioniert" und ungleich Null für einen Fehler (außer bei der Version, dort bekomme ich diese zurück als Integer).
Die ersten drei genannten Funktionen funktionieren problemlos. Ich kann die Version abfragen. Ich kann den port öffnen und auch schließen. Probleme macht mir nun das ermitteln der Sensorwerte. Ich habe zwei kleine Beispielcodes in C++ und Pascal beiliegen. Beide arbeiten augenschainlich mit Referenzvariablen:
Das C++ Beispiel:
UCHAR out0, out1, out2, out3, out4, out5, out6;
m_GetValue= (*funcMeasuredValues)(
0,
6, 3, 0, 0xFF, 0xFF, 0, 0,
&out0, &out1, &out2, &out3, &out4, &out5, &out6
);
bzw. der Pascal-Code
var
res0: Integer;
out0, out1, out2, out3, out4, out5, out6: Byte;
begin
res0:= GetMeasuredValues(
0,
6, 3, 0, $FF, $FF, 0, 0,
@out0, @out1, @out2, @out3, @out4, @out5, @out6
);
...
gibt es eine Möglichkeit, solche Aufrufe auch mit JAVA zu realisieren?
mein bisheriger Code sieht wie folgt aus:
Eine Schnittstelle, die die DLL Funktionen besitzt.
import com.sun.jna.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
//StdCallLibrary
public interface SENSOR145 extends Library {
SENSOR145 INSTANCE = (SENSOR145) Native.loadLibrary("SENSOR145_1", SENSOR145.class);
// Weitere Funktionen
int GetMeasuredValues(int portId, int i0, int i1, int i2, int i3, int i4, int i5, int i6, int o0, int o1, int o2, int o3, int o4, int o5, int o6);
}
und der Aufruf in der Main-Methode:
SENSOR145 lib = SENSOR145.INSTANCE;
int i = lib.GetVersion();
int j = lib.OpenComport(0, "COM4");
int t = lib.GetMeasuredValues(0, 6, 3, 0, 0xFF, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// ----------------------------------------------------------^^^^^^^^^^^^^^^^^^^ hier müssten die Referenzvariablen hin
int k = lib.CloseComport(0);
Kann mir da einer einen Tip von Euch geben, wie ich die Funktion der DLL in JAVA nutzbar machen kann? Im Moment bricht der Code mit mit einer Fehlermeldung ab, da der Aufruf der Funktion GetMeasuredValues falsch ist.
Mit freundlichem Gruß
Micha