C++ Methode Übersetzung in Java

TDO88

Bekanntes Mitglied
Hallo Zusammen,

ich habe von einem Messgerät eine Header Datei mit diesem Auszug:
Java:
typedef struct
{
    uint32_t bufferId;
    uint32_t frameIndex;            /* stream position of first frame in buffer */
    uint32_t numberOfSources;
    uint32_t numberOfFrames;
    uint32_t flags;                 /* OR'ed stream buffer flags */
} SA_SI_DataBufferInfo;

typedef struct
{
    SA_SI_DataBufferInfo info;
    uint8_t **data;         // pointer to pointer-array(s): data --> [ptr1,...,ptrN],
                            // where ptr<i> --> uint8[]
} SA_SI_DataBuffer;

SA_SI_AcquireBuffer(SA_SI_Handle handle,unsigned int bufferId,const SA_SI_DataBuffer **buffer);

Welchen Java Datentyp nehme ich jetzt für den Buffer, bzw. die data Variable in der struct?
Ich habe es jetzt schon mit PointerByReference und DataBuffer probiert, aber entweder bin ich zu doof, das richtig einzusetzen oder es sind nicht die richtigen Datentypen. Vielleicht kann mir da jemand weiter helfen?

Vielen Dank
 

TDO88

Bekanntes Mitglied
So, ich habe das .h File mit dem jnaerator übersetzt, jedoch hänge ich tatsächlich daran fest das übersetzte so anzuwenden.
Also, ich habe u.a. folgende Klassen (von jnaerator erzeugt):
Java:
public class SA_SI_DataBuffer extends Structure<SA_SI_DataBuffer, SA_SI_DataBuffer.ByValue, SA_SI_DataBuffer.ByReference > {
    /** C type : SA_SI_DataBufferInfo */
    public SA_SI_DataBufferInfo info;
    /**
     * pointer to pointer-array(s): data --> [ptr1,...,ptrN],<br>
     * C type : uint8_t**
     */
    public PointerByReference data;
    
    public SA_SI_DataBuffer() {
        //super();
    }
    protected List<? > getFieldOrder() {
        return Arrays.asList("info", "data");
    }
    /**
     * @param info C type : SA_SI_DataBufferInfo<br>
     * @param data pointer to pointer-array(s): data --> [ptr1,...,ptrN],<br>
     * C type : uint8_t**
     */
    public SA_SI_DataBuffer(SA_SI_DataBufferInfo info, PointerByReference data) {
        super();
        this.info = info;
        this.data = data;
    }
    public SA_SI_DataBuffer(Pointer peer) {
        super();
    }
    protected ByReference newByReference() { return new ByReference(); }
    protected ByValue newByValue() { return new ByValue(); }
    protected SA_SI_DataBuffer newInstance() { return new SA_SI_DataBuffer(); }
    public static SA_SI_DataBuffer[] newArray(int arrayLength) {
        return Structure.newArray(SA_SI_DataBuffer.class, arrayLength);
    }
    public static class ByReference extends SA_SI_DataBuffer implements Structure.ByReference {
            public ByReference(){}
            public ByReference(Pointer p) {super(p); read(); }
    };
    public static class ByValue extends SA_SI_DataBuffer implements Structure.ByValue {
        
    };
}

Java:
public class SA_SI_Event extends Structure<SA_SI_Event, SA_SI_Event.ByValue, SA_SI_Event.ByReference > {
    public int type;
    /** C type : field1_union */
    public field1_union field1;
    /** <i>native declaration : line 230</i> */
    public static class field1_union extends Union<field1_union, field1_union.ByValue, field1_union.ByReference > {
        /** error code if the event type is an error event */
        public int error;
        /** id of a buffer if the event has a buffer parameter */
        public int bufferId;
        /** an event parameter sent from the device (meaning depends on type) */
        public int devEventParameter;
        /** C type : uint8_t[24] */
        public byte[] unused = new byte[24];
        public field1_union() {
            super();
        }
        /** @param unused C type : uint8_t[24] */
        public field1_union(byte unused[]) {
            super();
            if ((unused.length != this.unused.length))
                throw new IllegalArgumentException("Wrong array size !");
            this.unused = unused;
            setType(byte[].class);
        }
        /** @param error_or_bufferId_or_devEventParameter error code if the event type is an error event, or id of a buffer if the event has a buffer parameter, or an event parameter sent from the device (meaning depends on type) */
        public field1_union(int error_or_bufferId_or_devEventParameter) {
            super();
            this.devEventParameter = this.bufferId = this.error = error_or_bufferId_or_devEventParameter;
            setType(Integer.TYPE);
        }
        public field1_union(Pointer peer) {
            super();
        }
        protected ByReference newByReference() { return new ByReference(); }
        protected ByValue newByValue() { return new ByValue(); }
        protected field1_union newInstance() { return new field1_union(); }
        public static field1_union[] newArray(int arrayLength) {
            return Union.newArray(field1_union.class, arrayLength);
        }
        public static class ByReference extends field1_union implements Structure.ByReference {
            
        };
        public static class ByValue extends field1_union implements Structure.ByValue {
            
        };
    };
    public SA_SI_Event() {
        //super();
    }
    protected List<? > getFieldOrder() {
        return Arrays.asList("type", "field1");
    }
    /** @param field1 C type : field1_union */
    public SA_SI_Event(int type, field1_union field1) {
        super();
        this.type = type;
        this.field1 = field1;
    }
    public SA_SI_Event(Pointer peer) {
        super();
    }
    protected ByReference newByReference() { return new ByReference(); }
    protected ByValue newByValue() { return new ByValue(); }
    protected SA_SI_Event newInstance() { return new SA_SI_Event(); }
    public static SA_SI_Event[] newArray(int arrayLength) {
        return Structure.newArray(SA_SI_Event.class, arrayLength);
    }
    public static class ByReference extends SA_SI_Event implements Structure.ByReference {
        
    };
    public static class ByValue extends SA_SI_Event implements Structure.ByValue {
        
    };
}

Und über die DLL des Messgerätes gibt es diesen Funktionsaufruf
Java:
/**
     * @brief Acquires a stream buffer for reading data.<br>
     * @param handle Handle to the device.<br>
     * @param bufferId Stream buffer ID.<br>
     * @param[out] buffer Pointer to the stream data buffer.<br>
     * As long as the buffer is acquired, the caller may read data from the buffer.<br>
     * The buffer must be ready before it can be acquired, which will be signaled by<br>
     * a streambuffer-ready event.<br>
     * Original signature : <code>SA_SI_Error SA_SI_AcquireBuffer(SA_SI_Handle, unsigned int, const SA_SI_DataBuffer**)</code><br>
     * <i>native declaration : line 526</i>
     */
    int SA_SI_AcquireBuffer(int handle, int bufferId, ByReference buffer[]);

Ich versuche diese Klassen zusammen mit der Funktion aquireBuffer auszuführen, allerdings bekomme ich nichts zurück. Es wird immer ein leerer Buffer zurückgegeben.
Java:
SA_SI_Event ev = new SA_SI_Event();
    int result = SA_SI_WaitForEvent(ihandle, ev, timeout);
    if (result != SA_SI_OK) return result;
    if (ev.type == SA_SI_STREAMBUFFER_READY_EVENT)
    {
        // get buffer data
        picoscale.SA_SI_DataBuffer dataBuffer = new picoscale.SA_SI_DataBuffer();
      
        result = SA_SI_AcquireBuffer(ihandle, ev.field1.bufferId, dataBuffer.castToReferenceArray());
        if (result != SA_SI_OK) return result;
        ...
}

Ich habe schon eine ganze Reihe an verschiedenen Dingen ausprobiert, aber leider klappt nichts davon.
Das Datenfeld von dataBuffer ist leider immer leer, obwohl das Gerät Werte erzeugt und schickt, da ja auch das Streamready event reinpurzelt.
Der originale C++ Code dazu sieht im übrigen so aus, falls das weiter hilft.
C++:
SA_SI_Event ev;
unsigned int result = SA_SI_WaitForEvent(handle,&ev,timeout);
if (result != SA_SI_OK)
    return result;
if (ev.type == SA_SI_STREAMBUFFER_READY_EVENT)
{
    // get buffer data
    const SA_SI_DataBuffer *pBuffer;
    result = SA_SI_AcquireBuffer(handle,ev.bufferId,&pBuffer);
    if (result != SA_SI_OK)
        return result;
    ...
}

Ich hänge jetzt schon seit einiger Zeit daran und komme leider nicht weiter. Ich hoffe jemand von euch hat eine Idee, wie man mit diesen Datentypen richtig umgeht.

Vielen Dank
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
M Eine static-Methode verlassen Allgemeine Java-Themen 2
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
X Komponente an Methode übergeben Allgemeine Java-Themen 1
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
S Getestete Methode um das Beste aus URL-Nutzereingaben rauszuholen..? Allgemeine Java-Themen 4
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M Methoden Methode Auslagern Allgemeine Java-Themen 6
P 4 Threads in einer Methode Allgemeine Java-Themen 2
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
N Methoden Methode Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben