Es dreht sich immer noch um Message#4 und nicht die von euch zitierte und verwendete #5
The outputs are assigned to arguments as you already mentioned and not the return value. When you call the dll, the arguments will return the outputs of the VI.
Vielleicht sinngemäß so:
Ausgabewerte eines VI werden immer in den Parametern eines DLL-Aufrufes zurückgegeben (nicht im Rückgabewert).
Gruß, Jens
kann man das in irgendeinem Handbuch oder so nachlesen.
In den offiziellen Schulungshandbüchern ist das ja nichterklärt und die Hilfe zum application Builder ist so naja...
Dafür das so ein kleines Teilchen wie der Application Builder mit seinen paar Eingabemasken vor 4 Monaten 1300€ gekostet hat!...! ist die
Hilfe dürftig und die online-Ressourcen lassen meines Erachtens etwas zu wünschen übrig.
Also ist das so? Warum steht dann in manchen erzeugten Headerfiles acuh mal ein int32_t und nicht immer void?
Wenn ich aber einen Rückgabewert brauche und mir ein Ausgabewert (assoziiere ich immer ausschließlich mit dem Frontpanel)
nicht reicht... was mache ich dann?
Hallo arphex,
Zitat:Warum steht dann in manchen erzeugten Headerfiles acuh mal ein int32_t und nicht immer void?
Das hatte Rolf schon erläutert: Int32 ist ein gültiger Rückgabetyp...
Zitat:Wenn ich aber einen Rückgabewert brauche und mir ein Ausgabewert (assoziiere ich immer ausschließlich mit dem Frontpanel)
nicht reicht... was mache ich dann?
Array of U8 gehen immer. Und die können so ziemlich alles darstellen, wenn man sie ordentlich hin- und her-typecasted. Andere Lösungen kann dir evtl. Rolf auszeigen...
(21.03.2012 14:23 )arphex schrieb: [ -> ]kann man das in irgendeinem Handbuch oder so nachlesen.
In den offiziellen Schulungshandbüchern ist das ja nichterklärt und die Hilfe zum application Builder ist so naja...
Dafür das so ein kleines Teilchen wie der Application Builder mit seinen paar Eingabemasken vor 4 Monaten 1300€ gekostet hat!...! ist die
Hilfe dürftig und die online-Ressourcen lassen meines Erachtens etwas zu wünschen übrig.
Also ist das so? Warum steht dann in manchen erzeugten Headerfiles acuh mal ein int32_t und nicht immer void?
Die Call Library Node ist ein Element das erlaubt externen Code aufzurufen. Es ist aber nicht Aufgabe von NI um im LabVIEW Manual einen kompletten C Kurs zu integrieren um Dir alles zu erklären was es im Zusammenhang mit der Call Library Node zu wissen gibt. Du kannst Dir immer ein ANSI C Lehrbuch kaufen und das Kapitel für Kapital durcharbeiten. Und auch dann weisst Du noch lange nicht alles was im Zusammenhang mit C Programmierung passieren kann. Das Buch bietet die Grundlage aber die Erfahrung musst Du dir in unzähligen Programmier-, Kompilier-, Test-, Crash-, und Anpassen Zyklen erarbeiten.
Ziemlich viel Zeitaufwand aber das lässt sich einfach nicht anders machen. Wenn Du ein Auto kaufst erwartest Du auch nicht dass im Handbuch dargelegt ist wie Du den Motor ausbauen musst um ihn selbständig zu revidieren. Dafür gibt es 4 jährige Berufslehrgänge als Mechaniker und dann hat der noch immer keine Detailkenntnisse für Deinen spezifischen Autotyp.
Zitat:Wenn ich aber einen Rückgabewert brauche und mir ein Ausgabewert (assoziiere ich immer ausschließlich mit dem Frontpanel)
nicht reicht... was mache ich dann?
Was ist daran verkehrt um Funktionsparameter als Ausgabevariablen zu verwenden? Das ist die angewiesenen Weise in C und das DLL Interface ist nun einmal auf C basiert.
Ansonsten: C Compilerkenntnisse aneignen!
Wenn ich einen Lamborghini habe aber damit einen 10 Tonnen Anhänger ziehen will kann ich das zwar lange wollen, und mich auf den Kopf stellen, aber das einzige was wirklich funktioniert ist den Lamborghini gegen eine schwere Zugmaschine einzutauschen. Nein die fährt nicht mehr 300 km/h und es ist auch nicht cool um damit über den Strandboulevard zu fahren, aber es ist halt einfach das eine oder andere.
Ok schlussendlich hat es funktioniert.
Ich habe einfach die Länge des Arrays genommen und an das externe Prog übergeben.
Dort zeige ich dann auf das von euch angesprochene u8Array und gebe per int32_ die Länge des Arrays
in Byte mit.
Laut NI-Support sind die Erfahrungen noch nicht ganz so groß mit dem Application Builder..
(22.03.2012 08:07 )arphex schrieb: [ -> ]Ok schlussendlich hat es funktioniert.
Ich habe einfach die Länge des Arrays genommen und an das externe Prog übergeben.
Dort zeige ich dann auf das von euch angesprochene u8Array und gebe per int32_ die Länge des Arrays
in Byte mit.
Ich verstehe Bahnhof aber wenns funktioniert!!
Zitat:Laut NI-Support sind die Erfahrungen noch nicht ganz so groß mit dem Application Builder..
Deine Erfahrungen? Der Application Builder besteht in verschiedener Ausführung seit LabVIEW 3.1 oder so. In der heutigen Form seit LabVIEW 8.0. Dass NI da keine Erfahrungen haben soll ist Bullshit und das Ganze hier ist auch nicht ein Application Builder Problem sondern ein User Problem.