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 

C-DLL, Speicherüberschreibung, Arraygröße



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!

03.02.2009, 09:38 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2009 09:52 von rolfk.)
Beitrag #12

rolfk Offline
LVF-Guru
*****


Beiträge: 2.317
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
C-DLL, Speicherüberschreibung, Arraygröße
' schrieb:Moin,

@ Jens
Die Representation des Eingangs vom "initialize array" kann ich leider nicht umstellen, da dort der "Call Library Node" angeschlossen ist.

Du stehst total auf dem Schlauch, sorry!

Wenn Du eine C Funktion aufrufst musst Du alle Parameter der Funktion VOR dem Aufruf festlegen. Natürlich kannst Du das Initialize Array nicht mit dem Array füttern dass aus der CLN kommt. Du musst mit InitializeArray ein entsprechendes Array mit der richtigen Länge erzeugen und am Eingang (sprich links an der CLN) anschliessen so dass die DLL Funktion auch einen Buffer hat in den sie die Resultate schreiben kann.

Die DLL Funktion ist rein C und C schreibt vor dass der Aufrufer alle eventuellen Buffer vor dem Aufruf einer Funktion anlegen muss. Da hast Du kein LabVIEW dass Dir schon brav das Händchen hält und wann immer das nötig ist ganz automatisch die entsprechenden Buffer anlegt und wieder aus dem Speicher entfernt. Dies ist ganz einfach C und LabVIEW kann Dir nur die Werkzeuge geben aber nicht die Arbeit abnehmen, da es ganz einfach nicht genug Informationen dazu hat und diese auch auf keine mögliche Weise selber erhalten kann.

Wenn Du schon C programmieren willst und nicht die eingebauten Funktionen in LabVIEW verwenden willst solltest Du Dir wirklich die Mühe machen um erst mal ein gutes C Tutorial durchzuarbeiten. Pointers, Arrays und Funktionsaufrufe sollten dort schon minimal gut erklärt werden um Dir das nötige Basiswissen zu geben, um auch solche Funktionen von LabVIEW aus aufzurufen.

Da ist aber ein Punkt der mir ziemliche Sorgen bereitet. Die Funktion correl() scheint am Ende den Buffer von ans mit free() friezugeben. Wenn das wirklich so sein soll denke ich mal dass Du diese Funktion nicht ohne Anpassungen von LabVIEW aufrufen kannst. Warum sollte die Funktion das tun, schliesslich willst Du in diesem Buffer doch das Resultatarray ins LabVIEw bekommen? Wenn die DLL versucht einen Buffer den sie von LabVIEW erhalten hat mit der C Runtime Funktion free() freizugeben geht das garantiert sehr falsch.

Rolf Kalbermatter

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 


Nachrichten in diesem Thema
C-DLL, Speicherüberschreibung, Arraygröße - rolfk - 03.02.2009 09:38

Gehe zu: