INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Einbinden einer DLL mit mehr Output-Parametern, als Input-Parametern



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

09.06.2011, 10:34
Beitrag #1

Herm Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Jun 2011

LV 2009 & 2012
2011
DE


Deutschland
Einbinden einer DLL mit mehr Output-Parametern, als Input-Parametern
Hallo,

Ich beschäftige mich im Rahmen meiner Studienarbeit seit kurzem mit Labview und besonders mit dem Einbinden von DLLs.
Die DLL die ich in Labview einbinden soll besitzt drei Input-Parameter und sieben Output-Parameter. Die Output-Parameter erhalten in der DLL ihre Input-Werte, aber Labview verlangt für jeden Parameter einen Input.
Mit welchen Modulen bzw. Werten kann ich die Input-Stellen der Output-Parametern belegen, damit Labview mit dieser DLL arbeiten kann?

Grüße

Herm
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.06.2011, 12:37
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Einbinden einer DLL mit mehr Output-Parametern, als Input-Parametern
(09.06.2011 10:34 )Herm schrieb:  Hallo,

Ich beschäftige mich im Rahmen meiner Studienarbeit seit kurzem mit Labview und besonders mit dem Einbinden von DLLs.
Die DLL die ich in Labview einbinden soll besitzt drei Input-Parameter und sieben Output-Parameter. Die Output-Parameter erhalten in der DLL ihre Input-Werte, aber Labview verlangt für jeden Parameter einen Input.
Mit welchen Modulen bzw. Werten kann ich die Input-Stellen der Output-Parametern belegen, damit Labview mit dieser DLL arbeiten kann?

Grüße

Herm

Was sind den das für Output Parameter? Für jeden Funktionsparameter musst Du einen korrekten Call Library Node Parameter konfigurieren. Inputparameter werden meist By Value (kein Pointer) übergeben wenn es Skalars sind. Outputparameter werden immer By Reference (als Pointer übergeben). Das muss man für den jeweiligen Parameter auch korrekt in der CLN Konfiguration festlegen.

Auch Outputparameter müssen durch den Aufrufer bereitgestellt werden, wobei hier der Wert meist nicht wichtig ist, aber die korrekte Speichergrösse umso mehr. Das ist vor allem wichtig wenn Du Strings oder Arrays hast in die die DLL Funktion etwas einfüllen soll. LabVIEW kann nicht wissen wie gross diese Strings oder Arrays sein müssen und macht deshalb auch keinerlei Anstalten das für Dich zu erledigen, ganz im Gegensatz zu allen anderen Situationen wenn Du ganz innerhalb LabVIEW bleibst. Daher darf man nicht vergessen den entsprechenden Buffer mittles Initilialize Array (und für Strings dann noch Byte Array to String) diesen Buffer vor dem Aufruf korrekt anzulegen. Sonst gibt es ganz hässliche Effekte da die DLL Speicher überschreibt den Sie nicht überschreiben darf da sie frisch fröhlich in den angebenen Speicher des Parameters schreibt der aber dazu nicht gross genug ist.

Also das was im Wire ist den Du an die Eingangsseite eines Outputparameters anschliesst ist meist völlig unwichtig, dass da aber ein Speicher vorhanden ist der gross genug ist für die Funktion um dass was sie gerne mitteilen möchte da auch hineinzuschreiben umso mehr.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.06.2011, 13:18
Beitrag #3

Herm Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Jun 2011

LV 2009 & 2012
2011
DE


Deutschland
RE: Einbinden einer DLL mit mehr Output-Parametern, als Input-Parametern
Hey,

Vielen Dank für deine Antwort, ich habe die Parameterliste als Anhang eingefügt.
Die Output Parameter sind 32 Bit Integer, zwei 32 Bit Arrays und ein vorzeichenloser 8 Bit Array.
Bei den Integer habe ich bislang einfache Konstanten als Input verwendet und bei den Arrays habe ich Arrays mit eingebundenen "Numerischen Bedienelementen" verwendet, da ich nicht weiß, wie groß die Arrays werden und so müssten die Arrays ihre Größe anpassen können. Die Größe der Arrays ist vom eingebundenen Bild abhängig und das wechselt ständig. Alternativ kann ich natürlich die Arrays mit sehr großen Weiten inizialisieren.


Angehängte Datei(en)
0 .txt  Parameter.txt (Größe: 3,02 KB / Downloads: 361)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2011, 11:12 (Dieser Beitrag wurde zuletzt bearbeitet: 14.06.2011 11:17 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Einbinden einer DLL mit mehr Output-Parametern, als Input-Parametern
(09.06.2011 13:18 )Herm schrieb:  und bei den Arrays habe ich Arrays mit eingebundenen "Numerischen Bedienelementen" verwendet, da ich nicht weiß, wie groß die Arrays werden und so müssten die Arrays ihre Größe anpassen können. Die Größe der Arrays ist vom eingebundenen Bild abhängig und das wechselt ständig. Alternativ kann ich natürlich die Arrays mit sehr großen Weiten inizialisieren.

Die Arrays müssen vor dem Aufruf in der Grösse anelegt werden die die Funktion maximal benützt. Eine C Funktion kann nicht einfach ein Array eben schnell mal grösser machen wenn das nötig ist. So funktioniert C halt einfach nicht. Das geht nur innerhalb eines spezifischen Frameworks wo sowohl der Aufrufer als auch der Aufgerufene sich ganz spezifisch darauf geeinigt haben, wie Speicher verwaltet wird und so. Das ist bei einer DLL grundsätzlich nicht gegeben, da sie von x-beliebigen Clients aufgerufen werden kann (Delphi, Visual Basic, Borland C, Viusual C, Gnu C application, LabVIEW, etc.) Der kleinste gemeinsame Teiler all dieser Systeme ist dass der Aufrufer für den Aufruf ALLEN Speicher zur Verfügung stellt den die DLL Funktion für Ausgabeparameter benötigt.

Normalerweise muss man die Arrays nicht einfach vorsorgehalber mit sehr grossen Grössen anlegen da man die Funktionen innerhalb eines Kontextes aufruft. In diesem Kontext ist die maximale Grösse meist eindeutig in der Dokumenation erwähnt (so nicht, den entsprechenden Programmierer an eine Schandpfahl binden und dort ein paar Tage schmoren lassen und dann die Komponente weit wegwerfen).

Aber das hier ist leider ziemlich grosses Pech:

* NOTE: histogram, circleList and display are allocated inside the function, so make sure to
* free the corresponding memory to avoid memory leaks!

Das heisst das die DLL Fumktion selber diese Speicher anlegt. Das unterstützt LabVIEW nicht direkt. Zwar kannst Du diese drei Parameter als Pointersized Integers, passed as Pointer definieren aber dann bekommst Du halt nur diesen Pointer zurück. Damit kann LabVIEW selber nichts tun. Wenn Du die Information in diesen Pointern benötigst ist das einzige was Du damit tun kannst, eine andere C Funktion aufrufen um die Daten aus diesem Pointer in ein richtiges LabVIEW Array zu kopieren. Such dazu nach MoveBlock hier, auf lavag.org und forums.ni.com und Du wirst viele Posts mit entsprechenden Informationen finden. Aber ohne etwas BasisverstÄndnis von C und C Pointern wird das eine sehr schmerzhafte Übung.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL in LV einbinden. Geht es nur mit einer anderen Wrapper-DLL Dimitri 24 27.166 02.07.2010 15:16
Letzter Beitrag: Dimitri
  Einbinden einer dll (*.so) Apu 3 6.333 08.03.2010 19:51
Letzter Beitrag: rolfk
  Einbinden einer DLL, Speichermanagement Mictlantecutli 3 7.935 14.10.2009 08:33
Letzter Beitrag: Mictlantecutli
  Problem beim Einbinden einer DLL preacha 18 19.225 25.09.2008 11:51
Letzter Beitrag: baliik
  Einbinden einer Delphi-dll Svenni 6 8.377 17.10.2006 12:05
Letzter Beitrag: Svenni

Gehe zu: