Wenn Sie auf diese Enumeration in Ihrer Struktur verweisen, wollen Sie sie einfach als int deklarieren, nicht als eFtUsbDeviceStatus oder ähnliches. Als Beispiel siehe AcOnLineWake unten:
%Vor%Ich habe die folgende enum, wie kann ich in jna?
Diese Aufzählung wird weiter in der Struktur referenziert.
%Vor%Abdul Khaliq
Wenn Sie JNA verwenden, möchten Sie wahrscheinlich die Werte der Enumeration in Java explizit angeben. Standardmäßig gibt Ihnen der grundlegende Enum-Typ von Java diese Funktionalität nicht wirklich, Sie müssen einen Konstruktor für ein EnumSet hinzufügen (siehe dies und dies ).
Eine einfache Methode zum Codieren von C-Enumerationen besteht darin, öffentliche statische Endkon- stakte zu verwenden, die in einer Klasse mit demselben Namen wie die enum eingebettet sind. Sie erhalten die meisten Funktionen, die Sie von einer Java-Enumeration erhalten, aber etwas weniger Overhead, um Werte zuzuweisen.
Einige gute JNA-Beispiele, einschließlich der darunter liegenden Snippets (die kopiert wurden), sind hier verfügbar.
Angenommen, Ihr C-Code sieht folgendermaßen aus:
%Vor%Dann sieht das Java wie folgt aus:
%Vor% In meinem Blog habe ich eine praktische Möglichkeit geschrieben, real Java enum
s mit JNA int
s. Es ist ein bisschen komplexer, aber es hat mehrere Vorteile:
Grundsätzlich müssen Sie eine benutzerdefinierte TypeConverter
für die% co_de verwenden %, und stellen Sie das JNA über eine einfache enum
bereit. Der größte Teil des zusätzlichen Codes besteht darin, zu vermeiden, dass für jede andere Klasse TypeMapper
eine separate TypeConverter
erstellt werden muss. (In meinem Fall musste ich eine Menge von ihnen machen.)
Sie können in meinem Projekt jhllib einen echten Code sehen. Sehen Sie sich insbesondere die Definitionen und Verwendungen von HlTypeMapper ,