Autor Thema: Problem bei Methodenaufruf mit JAVA  (Gelesen 5745 mal)

Offline bseidel

  • Newbie
  • *
  • Beiträge: 5
Problem bei Methodenaufruf mit JAVA
« am: August 03, 2010, 17:53:52 Nachmittag »
Hallo zusammen,

ich habe die DLL mit JNA in meinen Java-Projekt eingebunden und ich kann erfolgreich eine COM-Verbindung aufbauen und wieder abbauen. Mein Problem ist das die anderen Methoden nur Fehlermeldungen herausschmeißen. Ich bin der Meinung das ich nur einen Denkfehler habe.

Ein Beispiel (Ich möchte den Merker 33 auslesen):
Bin direkt über COM (Original Moeller Kabel) an eine easy 822-DC-TC angebunden.

(Man beachte das unsigned char in Java byte ist (http://en.wikipedia.org/wiki/Java_Native_Access)

public static native long Read_Object_Value(byte net_id, byte object, short index, byte data);
System.out.println(Read_Object_Value((byte)0, (byte)4, (byte)0, (byte)0));

Da bekomme ich soetwas zurück: 217936759541989377
Damit komme ich überhaupt nicht klar da ich einen LONG Wert erwarte.

Desweiteren steht in der Dokumentation öfters ein Sternchen,
long Read_Object_Value(unsigned char net_id, unsigned char object, unsigned short index, unsigned char * data),
aber ich finde nirgends einen Hinweis was dort zu beachten ist.

Ich hoffe ich ihr könnt mir da ein wenig weiterhelfen


Gruß Björn

Offline edu31

  • Jr. Member
  • **
  • Beiträge: 76
Re: Problem bei Methodenaufruf mit JAVA
« Antwort #1 am: August 05, 2010, 19:19:49 Nachmittag »
Hallo Björn,

das Sternchen im Parameterprofil  steht in C für einen Zeiger/Pointer, in dem konkreten Fall ist das eine Adresse auf ein Byte-Array also einen Speicherblock ausreichender Größe, den du beim Aufruf bereits reserviert haben musst - andernfalls wird die COM-DLL gnadenlos im Speicher "herumschmieren", denn sie will das angeforderte Objekt dort hineinschreiben.

Laut der Wiki-Tabelle müsstest du beim data-Parameter passend zum Native Type void* den Java-Datentyp Pointer verwenden.

BTW: Kann man mit println() einen numerischen Wert so direkt ausgeben oder müsste er nicht erst zu einem String konvertiert werden?

Gruß Eduard
« Letzte Änderung: August 05, 2010, 19:25:18 Nachmittag von edu31 »

Offline bseidel

  • Newbie
  • *
  • Beiträge: 5
Re: Problem bei Methodenaufruf mit JAVA
« Antwort #2 am: August 06, 2010, 19:09:39 Nachmittag »
Hallo Eduart,

ich bin so ein Blinder Typ! Ich hatte das varch* gar nicht gesehen und bei long hatte ich mich auch noch in der Zeile vertan. In Java ist Long = NativeLong!
Jetzt kann ich die easy schon einmal starten und beenden, dank dir!
Ich hätte wahrscheinlich immer das gleiche gelesen und es immer wieder falsch interpretiert.

Jetzt muss ich noch die Merker mit Read_Object_Value auslesen können, dann bin ich erstmal zufrieden gestellt ;) Aber das halte ich mir für Montag auf.

Danke dir nochmal.


Gruß Björn