Durch die Verwendung der fett markiert Hervorhebung in Ihrer ursprünglichen Frage, die Post-Formatierung geschluckt Schlüsselinformationen in Ihrem Beitrag, so dass meine ursprüngliche Antwort ist nicht ganz richtig. Ich habe versucht, Ihren Beitrag zu bearbeiten und Ihre ursprüngliche Absicht wiederherzustellen, und habe meine Antwort entsprechend aktualisiert. Aufgrund der Überprüfung dieses Funktionsnamens in anderen DLLs, die ich in einer kurzen Suche gefunden habe, bin ich mir jedoch nicht sicher, ob Sie auch die Quell-DLL korrekt zitiert haben, insbesondere ob die Variable Baud
auch ein Zeiger (*) ist.
Ihr erster Stop bei der Überprüfung korrekter Zuordnungen sollte the JNA documentation sein.
Für C-Zeiger-Typen funktioniert die JNA Pointer
, erfordert jedoch, dass Sie viel mehr manuelle Arbeitsspeicherzuweisung durchführen, das Ergebnis lesen und dann die richtige Anzahl von Byte aus der Zeigeradresse lesen auswählen. Wenn der Typ des Zeigers wie in diesem Fall angegeben wird, sollten Sie das entsprechende -Mapping verwenden, das die Speicherzuweisung für Sie übernimmt und den "stark typisierten" Zugriff auf die Methode besser steuert.
Für Ihre unsigned char *ComAdr
möchten Sie eine ByteByReference
Zuordnung verwenden. Ähnlich für int * FrmHandle
würden Sie IntByReference
verwenden. Sie haben Baud als einfach unsigned char
Typ aufgelistet, der direkt auf byte
abbilden würde; andere APIs haben das aber auch als char *
, also wäre es das gleiche ByteByReference
Mapping. Beachten Sie, dass Java keine vorzeichenbehafteten Variablen verwendet. Daher müssen Sie zusätzliche Maßnahmen für negative Bytewerte ergreifen, sobald Sie sie aus den Rückgabewerten extrahieren, um sicherzustellen, dass sie dem vorzeichenlosen C-Wert entsprechen, z. B. & 0xff
.
Wenn es möglich ist, verwenden Sie JNI über JNA. JNA ist Performance Killer. Ich denke, dass "Byte" in Java auf "unsigned char" gemappt werden könnte. –
Sind Sie sicher, dass Sie die korrekte DLL-Funktionssignatur gepostet haben? Eine kurze Suche nach dieser Funktion und den Argumenten im Internet zeigt symbolische Symbole an, die Sie nicht angegeben haben. Diese sind wichtig, um Ihre Frage zu beantworten. –