Grüß Euch!
Seit einiger Zeit versuche ich, ein in Java geschriebenes Open Source Projekt mit LabVIEW anzusteuern. Genauer möchte ich bilder im OME-TIFF format via bio-formats (s.
http://www.openmicroscopy.org/site) speichern. Vom OSProjekt aus gibt es auch die c++ bindings, sodass man die Funktionen via java virtual machine, mit Jace als dll bekommt.
Um von LabVIEW aus darauf komfortabel zugreifen zu können, versuche ich eine Wrapper-Dll zu schreiben, die mit der o.g. dll kommuniziert. Diese startet bis jetzt die JVM und schreibt ein Bild aus Zufallszahlen. Zum Test habe ich ein c++ konsolenprogramm geschrieben, das wie nachher LabVIEW die dll ansteuert. Damit funktioniert alles wunderbar.
Rufe ich meine wrapper dll aber mit LabVIEW auf, bekomme ich Probleme:
Starte ich nur die JVM, so endet die Funktion ohne Fehler und gibt mir auch zufällig gewählte Zahlen wie z.B. 42 zurück. Wenn ich dann aber LabVIEW schließe, bekomme ich den Fehler <The instruction at “0x08f2f83a” referenced memory at “0x081f9b64”. The memory could not be “read”>. Das passiert genau dann wenn jace::helper::createVM(..) nicht auskommentiert ist.
Die JVM scheint also irgendwie ziellose Pointer zu erstellen, die das c++ programm nicht stören, LV aber schon..
Wenn ich zusätzlich versuche, das Zufallsbild zu schreiben, bekomme ich bei der Ausführung Fehler - aber ich nehme an dass das an der falsch initialisierten JVM liegt..
Hat jemand von Euch erfahrung mit LabVIEW und JVM? Das näheste, das ich dazu gefunden habe, war der Artikel
http://digital.ni.com/public.nsf/allkb/BEE...6256BC80068A49A
der mir aber auch nicht weiterhelfen konnte..
für die JVM gibt es eine JVM.dll, die ich als includepfad beim erstellen der lvlib angegeben habe, da LabVIEW scheinbar nicht standardmäßig die PATH-Systemvariable durchsucht (!?)
viele Grüße + Danke
Heinrich
(verwendete Versionen: Visual Studio 2008, LV2009)
[der .cpp code ist grad nicht sehr schön weil ich grad dauernd am rumkommentieren zum fehlersuchen bin - main wird nicht verwendet, nur createJVM und minWrite]