13.10.2009, 15:41
Hallo allerseits,
ich arbeite seit kurzem mit LabVIEW und bin jetzt auf ein Problem gestoßen, das ich nicht gelöst bekomme. Ich würde mich daher sehr freuen, wenn mir jemand weiterhelfen könnte.
Also folgendes: Ich möchte die Funktionen einer DLL nutzen. (Mit Hilfe der DLL kommuniziere ich mit einem externen Gerät). Dazu benutze ich den Block "Aufruf externer Bibliotheken". Der Funktionsprototyp lautet:
Das Einbinden der DLL funktioniert einwandfrei, LabVIEW erkennt die exportierten Funktionen der DLL problemlos. Bei den Parametern habe ich die folgenden Einstellungen gemacht:
Typ: Array
Datentyp: 8-Byte-Double
Dimension: 1
Array-Format: Array-Handle
An die Ein- und Ausgänge des LabVIEW-Blocks habe ich zum Testen Bedien- bzw. Anzeigeelemente gehängt.
Die DLL-Funktion allokiert selbstständig den von ihr benötigten Speicher, den man mit einer weiteren DLL-Funktion wieder freigeben muss. (Leider kann ich nicht mehr Informationen zur Verfügung stellen, ich kenne nur die Funktionsprototypen und eine kurze Beschreibung, den Quellcode habe ich nicht.)
Das Problem ist, dass LabVIEW nach dem Aufruf entweder den Dialog "Nicht genügend Speicher zum Abschließen dieser Operation" anzeigt, oder direkt nach der Ausführung abstürzt. (Unabhängig davon, ob ich die Funktion zum Freigeben des Speichers aufrufe oder nicht.) Ich denke mal, da kommen sich die DLL und der Speichermanager in die Quere, oder?
Tja jedenfalls weiß ich nicht genau wie ich die Funktion behandeln soll, sodass keine Speicherkonflikte entstehen.
Ich hoffe, ich konnte mein Problem hinreichend beschreiben... Ach ja, das VI habe ich nicht mit hochgeladen, da es ohne das Gerät nicht korrekt ausgeführt werden kann. Und noch etwas: Die DLL wurde schon in mehreren C-Projekten genutzt, wo sie einwandfrei funktioniert.
---
LabVIEW Version 8.6.1f1
ich arbeite seit kurzem mit LabVIEW und bin jetzt auf ein Problem gestoßen, das ich nicht gelöst bekomme. Ich würde mich daher sehr freuen, wenn mir jemand weiterhelfen könnte.
Also folgendes: Ich möchte die Funktionen einer DLL nutzen. (Mit Hilfe der DLL kommuniziere ich mit einem externen Gerät). Dazu benutze ich den Block "Aufruf externer Bibliotheken". Der Funktionsprototyp lautet:
Code:
unsigned int GetData(double **X, double **Y);
Typ: Array
Datentyp: 8-Byte-Double
Dimension: 1
Array-Format: Array-Handle
An die Ein- und Ausgänge des LabVIEW-Blocks habe ich zum Testen Bedien- bzw. Anzeigeelemente gehängt.
Die DLL-Funktion allokiert selbstständig den von ihr benötigten Speicher, den man mit einer weiteren DLL-Funktion wieder freigeben muss. (Leider kann ich nicht mehr Informationen zur Verfügung stellen, ich kenne nur die Funktionsprototypen und eine kurze Beschreibung, den Quellcode habe ich nicht.)
Das Problem ist, dass LabVIEW nach dem Aufruf entweder den Dialog "Nicht genügend Speicher zum Abschließen dieser Operation" anzeigt, oder direkt nach der Ausführung abstürzt. (Unabhängig davon, ob ich die Funktion zum Freigeben des Speichers aufrufe oder nicht.) Ich denke mal, da kommen sich die DLL und der Speichermanager in die Quere, oder?
Tja jedenfalls weiß ich nicht genau wie ich die Funktion behandeln soll, sodass keine Speicherkonflikte entstehen.
Ich hoffe, ich konnte mein Problem hinreichend beschreiben... Ach ja, das VI habe ich nicht mit hochgeladen, da es ohne das Gerät nicht korrekt ausgeführt werden kann. Und noch etwas: Die DLL wurde schon in mehreren C-Projekten genutzt, wo sie einwandfrei funktioniert.
---
LabVIEW Version 8.6.1f1