LabVIEWForum.de
DLL-Anbindung lösen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: DLL-Anbindung lösen (/Thread-DLL-Anbindung-loesen)



DLL-Anbindung lösen - astraios - 16.04.2007 10:28

Hallo,

ich weiß nicht ganz, wie ich das Thema benennen soll... deshalb beschreib ich einfach mal mein Anliegen:

Ich benutze LV, um über eine DLL-API auf Vector CAN-Hardware zuzugreifen. Das funktioniert auch alles ganz gut. Nur ein Problem hab ich noch:

Die Verbindung zum Treiber wird durch eine Open() Funktion hergestellt und zum Schluss durch eine Close() Funktion wieder sauber geschlossen. Wenn jetzt aber mein LV Programm zwischendrin durch irgendeinen Grund beendet wird, ohne dass Close() aufgerufen wird (durch einen unbehandelten Fehler, Abbrechen Knopf o.ä.), kann ich die Treiberschnittstelle nicht mehr verwenden, es sei denn ich starte LV neu. Es muss also noch irgendwie die DLL geladen sein... Kann ich das beim erneuten Start vom Programm irgendwie prüfen und "resetten"?


Ich hoffe, mein Problem ist klar geworden Rolleyes

Danke schonmal im Voraus und viele Grüße

Robert


DLL-Anbindung lösen - IchSelbst - 16.04.2007 10:47

' schrieb:Es muss also noch irgendwie die DLL geladen sein... Kann ich das beim erneuten Start vom Programm irgendwie prüfen und "resetten"?
Ich würde sagen, die DLL selbst ist nicht das Problem. Vielmehr ein Handle, den die DLL zum Treiber hin geöffnet hat. Der wird u.U. nicht automatisch gelöscht. Beim erneuten Öffnen ohne vorher "Close Handle" gemacht zu haben, könnte so ein noch gestehender Handle zu einem Fehler "Resource nicht verfügbar" (o.ä.) führen. Beim Beenden der LV-IDE werden - meistens - alle von LV angeforderten Handles durch das Betriebssystem automatisch geschlossen.

Es soll zwar Möglichkeiten geben, zu überprüfen, ob eine DLL bereits geladen ist respektive kann man eine DLL auch erst per Programm laden lassen - aber da kenne ich mich nicht aus.

Es kommt auch sehr auf die DLL an. Wenn die z.B. mit so einem Handle arbeitet, könnte es klappen, indem du einfach den Open weglässt und einen Leseversuch auf die angeschlossene Harware machst.

Ich selbst würde mein Programm aber auf jeden Fall so schreiben, dass egal was der Anwender macht die DLL immer geschlossen wird. Notfalls wird eben Alt-F4 etc. unterbunden. AVs aus Gründen, die der Programmierer nicht zu vertreten hat, sind natürlich ausgeschlossen.


DLL-Anbindung lösen - astraios - 16.04.2007 11:16

Danke für Deine Antwort. Auf die geschlossene Hardware kann ich leider nicht zugreifen. Aber ich hab mir jetzt nen netten Workaround gebastelt. Ist zwar die Paranoya Variante - aber es scheint zu funktionieren: Ich speicher mir nach dem erfolgreichen Öffnen des Treibers alle Handles in eine Datei. Und beim nächsten mal les ich die Handles aus der Datei und versuche, mit denen die Treiberanbindung zu schließen bevor ich eine neue öffne... Smile


DLL-Anbindung lösen - holterpolter - 18.04.2007 11:09

' schrieb:Danke für Deine Antwort. Auf die geschlossene Hardware kann ich leider nicht zugreifen. Aber ich hab mir jetzt nen netten Workaround gebastelt. Ist zwar die Paranoya Variante - aber es scheint zu funktionieren: Ich speicher mir nach dem erfolgreichen Öffnen des Treibers alle Handles in eine Datei. Und beim nächsten mal les ich die Handles aus der Datei und versuche, mit denen die Treiberanbindung zu schließen bevor ich eine neue öffne... Smile


Und wenn du die Close-Funktion mit einem Button verbindest? Sodass du sie jederzeit ausführen kannst. Ich hab das mal für eine COM-Schnittstelle gemacht, wo ich dasselbe Problem hatte.