ch habe ine c-dll für den Zugfriff auf ein Spektrometer. Da ich es in JAVA verwenden will, habe ich eine Klasse mit JNA geschrieben.
Ich kann über USB auf das Spektrometer zugreifen und Werte auslesen, setzen. Heisst grundsätzlich funktioniert der Zugriff. Funktionen die in Struct-Pointer (JAVA Structures) schreiben funktionieren auch.
Ich habe aber Probleme mit Funktionen, die Pointer auf Type als Argument nehmen, um ein Array zurückzugeben.
Zum Beispiel:
in rcu1a.h
ausschnitt aus rcu1a.java
und aus der zugehörigen zugriffsklasse spectrometer.java
Die Methode sollte ein Double-Array mit 6 Feldern zurückgeben, allerdings erhalte ich einen Error:
Wenn ich stattdessen calibData.getValue() eingebe, erhalte ich den Wert, der im ersten Feld des Arrays stehen sollte.
Was mache ich falsch, bzw. was sollte ich ändern?
Danke für eure Antworten!
Ich kann über USB auf das Spektrometer zugreifen und Werte auslesen, setzen. Heisst grundsätzlich funktioniert der Zugriff. Funktionen die in Struct-Pointer (JAVA Structures) schreiben funktionieren auch.
Ich habe aber Probleme mit Funktionen, die Pointer auf Type als Argument nehmen, um ein Array zurückzugeben.
Zum Beispiel:
in rcu1a.h
Code:
USHORT WINAPI RC_ReadCalibrationValue( HANDLE DeviceHandle, double *DataArray);
ausschnitt aus rcu1a.java
Code:
short RC_ReadCalibrationValue(Pointer DeviceHandle, DoubleByReference DataArray);
und aus der zugehörigen zugriffsklasse spectrometer.java
Code:
//load library
private rcu1a lib = (rcu1a) Native.loadLibrary("rcu1a", rcu1a.class);
//...
private DoubleByReference calibData = new DoubleByReference();
//...
public double [] calibrationData()
{
lib.RC_ReadCalibrationValue(DeviceHandle, calibData);
return calibData.getPointer.getDoubleArray(0,6);
}
Die Methode sollte ein Double-Array mit 6 Feldern zurückgeben, allerdings erhalte ich einen Error:
java.lang.IndexOutOfBoundsException: Bounds exceeds available space : size=8, offset=48
Wenn ich stattdessen calibData.getValue() eingebe, erhalte ich den Wert, der im ersten Feld des Arrays stehen sollte.
Was mache ich falsch, bzw. was sollte ich ändern?
Danke für eure Antworten!