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 

DLL: C++ Addresseninhalt an Labview schicken



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!

24.08.2011, 09:10
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL: C++ Addresseninhalt an Labview schicken
(22.08.2011 13:10 )Castorp schrieb:  Danke, Jens! Das hat mich schonmal weitergebracht. Es funktioniert mit dem Rückgabewert void*.

Allerdings gebe ich jetzt die Adresse einer lokalen Variable zurück, d.h. der Inhalt wird in Labview möglicherweise überschrieben oder geht verloren, habe ich das richtig verstanden?
Ist es möglich den Inhalt zu sichern, ohne den gesamten Inhalt als Variable ausgeben zu müssen?

Also Du musst Dir einfach auch bewusst werden über die Lebenszeit von Variablen und Objekten. Das ist nicht dasselbe.

class {

} MyObject;


MyObject * function(x, y, z) {
MyObject *o = new MyObject;

........

return o;
}

o ist zwar eine lokale Variable und wird ungültig nach der Rückkehr der Funktion. Das heisst aber nicht dass das Objekt auf das o zeigt auch ungültig wird. C++ kennt schliesslich keine automatische Garbage Collection die sowas tun könnte. Ein Objekt wird nur ungültig wenn man es mit delete auch wieder aus dem Speicher entfernt und das sollte man auch tunlichst tun, ansonsten bekommst Du echte Speicherleaks.

Das ist auch der Grund warum ich persönlich obige Implemtation nicht so empfehle. Es geht zwar und auch gut, wenn der LabVIEW Programmierer weiss was er tut und die entsprechenden Paradigmen kennt, aber die meisten LabVIEW Programmierer sind gewöhnt dass man zum debuggen ein VI abbrechen kann und dann wieder neu starten. Wenn man das in einem VI oder Applikation tut in der solche C++ Objekte angelegt werden, und zwar irgendwo zwischen dem Anlegen und wieder Freigeben der Objekte, erzeugt man Memoryleaks die in manchen Fällen durchaus ein Problem werden können. Und wenn der weniger bedarfte LabVIEW Programmierer gar vergisst die Freigabefunktion aufzurufen läuft die Applikation nicht mal in non-debug sehr lange.

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
Anzeige
30
Antwort schreiben 


Nachrichten in diesem Thema
RE: DLL: C++ Addresseninhalt an Labview schicken - rolfk - 24.08.2011 09:10

Gehe zu: