So ordnen Sie enum in JNA zu

8

Ich habe die folgende enum, wie kann ich in jna?

Diese Aufzählung wird weiter in der Struktur referenziert.

%Vor%

Abdul Khaliq

    
Abdul Khaliq 21.07.2009, 07:53
quelle

4 Antworten

11

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%     
Mark Elliot 31.08.2009, 18:40
quelle
7

In meinem Blog habe ich eine praktische Möglichkeit geschrieben, real Java enum s mit JNA , anstatt nur willkürlich int s. Es ist ein bisschen komplexer, aber es hat mehrere Vorteile:

  • Sie erhalten am meisten der Typ-Sicherheit und Fehlervermeidung
  • Ihre IDE kann Dinge vorschlagen / automatisch vervollständigen
  • Sie können eine viel einfachere und einfachere Java-API erstellen

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 , EnumConverter und JnaEnum .

    
Darien 03.12.2010 00:44
quelle
2

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%     
Erik B 10.03.2010 19:44
quelle
0

Es gibt nicht viel Unterschied in der Syntax zwischen C ++ und Java für eine Enum.

%Vor%

Sie können es als eFtUsbDeviceStatus referenzieren.

    
Anoop 31.07.2009 03:48
quelle

Tags und Links