11-08-2007 04:42 AM
11-08-2007 06:59 AM
Hi there
LV creates a single instance of the DLL, so you can store data inside the dll over several calls to different functions. see attached example for usage of a dll global variable and a static variable. some dialog boxes will be shown, see the putget.cpp to see why.
If you can't save data over several function calls i presume there's a bug in the dll. Let us see some code to help you out.
11-08-2007 07:00 AM
11-12-2007 06:54 AM
Danke für Eure Hilfe.
Ich habe jetzt herausgefunden, dass ich noch ein ganz anderes Problem habe.
Wenn ich mein vi in LabVIEW 7.1 ablaufen lasse, bekomme ich falsche Rückgabewerte aus meiner DLL-Funktionen, aber wenn ich eine EXE erzeuge und diese anschließend ablaufen lasse, funktioniert alles einwandfrei. Woran kann dies liegen?
Vielen Dank!
11-13-2007 03:13 AM - edited 11-13-2007 03:14 AM
ralfw wrote:
Danke für Eure Hilfe.
Ich habe jetzt herausgefunden, dass ich noch ein ganz anderes Problem habe.
Wenn ich mein vi in LabVIEW 7.1 ablaufen lasse, bekomme ich falsche Rückgabewerte aus meiner DLL-Funktionen, aber wenn ich eine EXE erzeuge und diese anschließend ablaufen lasse, funktioniert alles einwandfrei. Woran kann dies liegen?
11-13-2007 07:36 AM
Hallo Rolf,
die DLL ist zuvor in einem C++ Programm eingebunden gewesen – hat gut funktioniert. Jetzt soll mit LabVIEW ein neues Programm geschrieben und dieselbe DLL eingebunden werden. DLL in C++ erstellt.
Die DLL komuniziert mit einem Gerät über die serielle Schnittstelle. (z.B. Gerät stoppen / starten)
Ich habe die DLL nicht geschrieben und weiß somit leider auch nicht, wie diese genau aufgebaut ist. Die meisten Funktionen in der DLL besitzen keine Übergabewerte. Die Funktionen melden lediglich einen booleschen Wert zurück, ob die Funktionen richtig abgearbeitet wurden.
Die Parameter „reentrant“ und „UI Thread“ der Call Libary Function Node habe ich auch schon verändert – immer das gleiche Ergebnis. In LabView meldet die Funktion einen Fehler zurück und beim Ausführen der EXE-Anwendung ist alles in Ordnung - das Gerät geht in Stop bzw. Start.
Ist es besser die benötigten Parameter jeder Funktion direkt zu übergeben?
Ich werde versuchen mit dem Entwickler der DLL zu reden.
Vielen Dank!
Ralf
11-13-2007 07:42 AM
11-14-2007 03:57 AM
Hallo Felix,
ich verwende "Call Libary Function Node" und ich bekomme nur eine 0 (Fehler) oder 1 (OK) von der DLL-Funktion zurück. Bei der Funktion Initialisierung wird die verwendete Com Schnittstelle in eine globale Variable geschrieben. Die anderen Funktionen greifen anschließend auf diese globale Variable zu. In LabVIEW bekomme ich von allen DLL-Funktionen eine 0 zurück und bei der EXE-Anwendung immer eine 1, und das Gerät startet bzw. stoppt.
Ich verstehe nicht, dass es bei der EXE-Anwendung funktioniert und in LabVIEW nicht.
Gruss, Ralf
11-14-2007 05:44 AM
11-14-2007 06:33 AM
Hallo Felix,
hab schon mit allen Parametern der Call Libary Funktion gespielt - kein Erfolg.
Wenn ich einen anderen Datentyp verwende bekomme ich undefinierte Werte aus den anderen Bytes.
Ich habe schon mit einem Kollegen geredet, welcher öfters DLL's eingebunden hat - er kann sich das auch nicht erklären, wieso es nur mit der EXE-Anwendung läuft.
Ich versuche jetzt den Entwickler der DLL zu kontaktieren, möglicherweise kann man die globalen Variablen herausnehmen - vielleicht kommen wir dann der Sache auf den Grund.
Danke!
Gruss, Ralf