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 

Problem Aufruf einer C-DLL mit Array Pointer



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!

29.04.2009, 09:21
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Problem Aufruf einer C-DLL mit Array Pointer
' schrieb:Eine ähnliche Funktion haben wir erstellt um eine Simulation unserer Messung durchführen zu können. Dabei haben wir keine Probleme gehabt (zumindest den in-Parameter Arrays), weshalb wir bisher davon ausgingen dass dies keine Probleme bereitet. Die grösse der Arrays werden übrigens der Schnittstelle übergeben( lvLayerCount, lvAttributeCount, lvParameterCount, sind die Grössen des 3D-Arrays). Ebenfalls haben wir ja keine Probleme wenn die Checkbox für den Fit nicht ausgwählt wird und beim erstmaligen Ausführen des Fits.

Diese Dinge sagen im Zusammenhang mit dem Aufruf einer C Funktion sehr wenig oder gar nichts. Wenn zum Beispiel ein zu kleines Ausgangsarray and eine C Funktion übergeben wird kann das:

1) sofort crashen
2) irgendwann mal später crashen
3) Erst crashen wenn man LabVIEW (oder das VI) abschliesst und LabVIEW beim aufräumen über zerschossenen Pointer stolpert.
4) Andere Daten in Deinem Programm zerstören

Alles hängt davon ab wie in em Moment die verschiedenen Arrays, die LabVIEW Verwaltungsstrukturen selber und so weiter im Speicher angeordnet sind.

Ein Crash beim zweiten Durchlauf könnte zum Beispiel daher rühren dass ihr irgend eine Speicheraddresse überschreibt. Beim zweiten Durchlauf versucht LabVIEW diese neu zu allozieren und will die alte deallozieren aber leider ist da jetzt etwas Falsches so dass der entsprechende free() Aufruf voll in die hosen geht.

Ich habe sehr viel Erfahrung mit Aufrufen von DLLs und grundsäzlich ist dazu zu sagen, wenn es crasht und funkt dann ist beinahe nie LabVIEW der Schuldige sondern der Programmierer. Ob das von einer verkehrten Konfiguration der Call Library Node kommt, von einer zu kleinen Allokation von Buffern oder ganz einfach einem Programmierfehler in der DLL ist dabei völlig egal.

Das zu finden ist nicht immer einfach und grundsätzlich erachte ich Source Code Debugging der DLL bei Aufruf davon aus LabVIEW als die einzige wirklich funktionierende Lösung.

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
Problem Aufruf einer C-DLL mit Array Pointer - rolfk - 29.04.2009 09:21

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Problem bei Aufruf einer dll swoc 5 3.241 08.09.2022 17:01
Letzter Beitrag: Martin.Henz
  Datenübergabe an DLL Pointer to Pointer Reiling 2 9.566 02.02.2018 10:59
Letzter Beitrag: Reiling
  Absturz durch unzulässige Pointer VS_03 3 10.274 28.10.2016 18:32
Letzter Beitrag: VS_03
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 16.988 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer auf Array mit Labview übertragen und darstellen lupus022 35 32.400 19.07.2013 10:53
Letzter Beitrag: lupus022
  Pointer und MoveBlock OXO 4 8.191 03.06.2013 16:31
Letzter Beitrag: OXO

Gehe zu: