' schrieb:Ich habe den call library node verwendet und argv als c-string-zeiger definiert - dann war das wohl falsch? dann werde ich mal schauen wie ich das richtig mache (allerdings kommt der memory-fehler auch wenn ich minWrite nicht aufrufe)
Ich habe es eben auch so gelesen, dass die aufrufkonvention cdecl ist, und habe angenommen dass das der aufrufkonvention C im call library node entspricht, und dieses ausgewählt..
const char * argv[] ist nicht ein C String pointer sondern ein Pointer auf ein Array von C String Pointern. (Könnte auch ein Pointer auf einen C string Pointer sein, da C keinen Unterschied macht zwischen char *var und char var[], respektive die zweite Variante war in vielen früheren C Compilern unbekannt) aber argc und argv sind die üblichen Weisen um Aufrufparameter an die Hauptfunktion eines Executables zu übergeben und dort ist es immer ein Array von Strings.
Da aber LabVIEW Strings nicht gleich C Strings sind kann man nicht einfach ein LabVIEW Stringarray machen und das an die Funktion geben und der const char *argv[] ist ganz sicher kein C String Pointer, d.h. deine Funktion is mit der Call Library Node grundsätzlich nicht aufrufbar.
Wenn der Memoryfehler auch beim Aufrufen von nur der createJVM() geschieht hast Du ein seriöses Problem. Die Funktionsparameter sind ja eindeutig, da kann es also beinahe nicht liegen. Deshalb muss es wohl etwas sein was Du in dieser Funktion tust. Was kann ich Dir leider nicht sagen da ich erstens nicht gut beschlagen bin in C++ und zweitens die Library die Du aufrufst nicht kenne. Von meinen C Kenntnissen her finde ich einiges an dem Code sehr fragwürdig aber kann nicht beurteilen ob es ein Problem ist. Beispielsweise deklarierst Du eine Variable jace::OptionList list; und referenzierst Du die danach. Es ist mir nicht deutlich ob die Deklaration dieser Variablen diese auch gleich initilialisiert oder nicht. Falls nicht müsste der anschliessende Aufruf natürlich schwer in die Hosen gehen.