JNA getFieldOrder() Bedeutung

Diskutiere JNA getFieldOrder() Bedeutung im Allgemeine Java-Themen Bereich.
D

Der_AltMann

Ich habe nicht ganz verstanden, was die Methode bringt. Außerdem verstehe ich nicht ganz, wie Structs in der Methode behandelt werden müssen.
Vielen Dank schonmal :)
 
J

JustNobody

In C gibt es structs. Wenn Du einb C (oder c++) struct nutzen willst, dann brauchst Du ein Gegenpart. In der JNA Library dient dazu die Klasse Structure (com.sun.jna) und zu dieser Klasse gehört die (früher abstrakte) Methode getFieldOrder(), welche eine Liste der Felder der struct zurück gibt.

Das ist deshalb wichtig, da die Auflistung der Felder, welche in einer Klasse vorhanden sind, bei der Abfrage über getClass().getFields() nicht fest ist:
Field order must be explicitly indicated, since the field order as returned by Class.getFields() is not guaranteed to be predictable.

Somit ist das keine Methode, die ein struct irgendwie behandelt sondern in JNA wird eine von Structure abgeleitete Klasse verwendet, um als Gegenpart zum c/c++ struct zu dienen. Und die Methode dient dazu, die Felder und ihre richtige Reihenfolge zu definieren.

Btw: Statt die Methode getFieldOrder zu überschreiben kann man auch die @FieldOrder Annotation nutzen. (http://java-native-access.github.io/jna/5.6.0/javadoc/com/sun/jna/Structure.FieldOrder.html)

Siehe dazu auch: http://java-native-access.github.io/jna/5.6.0/javadoc/overview-summary.html (Wobei da das Minimal-Beispiel gekürzt zu sein scheint, denn das Point Beispiel hat weder die Annotation noch überschreibt es die Methode...)
 
D

Der_AltMann

In C gibt es structs. Wenn Du einb C (oder c++) struct nutzen willst, dann brauchst Du ein Gegenpart. In der JNA Library dient dazu die Klasse Structure (com.sun.jna) und zu dieser Klasse gehört die (früher abstrakte) Methode getFieldOrder(), welche eine Liste der Felder der struct zurück gibt.

Das ist deshalb wichtig, da die Auflistung der Felder, welche in einer Klasse vorhanden sind, bei der Abfrage über getClass().getFields() nicht fest ist:


Somit ist das keine Methode, die ein struct irgendwie behandelt sondern in JNA wird eine von Structure abgeleitete Klasse verwendet, um als Gegenpart zum c/c++ struct zu dienen. Und die Methode dient dazu, die Felder und ihre richtige Reihenfolge zu definieren.

Btw: Statt die Methode getFieldOrder zu überschreiben kann man auch die @FieldOrder Annotation nutzen. (http://java-native-access.github.io/jna/5.6.0/javadoc/com/sun/jna/Structure.FieldOrder.html)

Siehe dazu auch: http://java-native-access.github.io/jna/5.6.0/javadoc/overview-summary.html (Wobei da das Minimal-Beispiel gekürzt zu sein scheint, denn das Point Beispiel hat weder die Annotation noch überschreibt es die Methode...)
Vielen Dank das hilft mir auf jeden Fall weiter! :)

Ich hatte paar Mal das Problem, dass in einem Struct ein weiteres Struct vorhanden war, oder ein Array mit Structs drin. Als ich dann dieses Struct in die Fieldlist übernehmen wollte habe ich immer den Fehler bekommen:
Structure.getFieldOrder() on class DriverConfig provides too many names [4] ... to match declared fields [3]

Muss man die Structs da irgendwie anders aufnehmen?
 
J

JustNobody

Wie hast du denn die Felder aufgeführt? Wenn du ein Beispiel bei gst, dann kann man das Problem bestimmt lösen.

Hast du evtl. eine Liste mit allen Elementen erstellt?
Nach meinem Verständnis derzeit ist der Typ ja egal. Du nennst nur die Felder und gut ist es. Wenn ein Feld im struct wieder ein Structure ist, dann ist es halt so. Die Felder dieser Structure führst du nicht im übergeordneten Structure auf.
 
D

Der_AltMann

Ich habe die Lösung selber gefunden...es lag daran, dass ich ein Feld nicht als public deklariert habe
 
D

Der_AltMann

benötige ich bei einem Union dann auch die getFliedOrder()?
 
J

JustNobody

Schau doch einfach einmal in die Dokumentation:

Da findet sich dann:
"Unions do not need a field order, so automatically provide a value to satisfy checking in the Structure superclass."
 
Thema: 

JNA getFieldOrder() Bedeutung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben