LabVIEWForum.de
exe stürzt nach beenden ab sobald dll eingebunden ist - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Application Builder (/Forum-Application-Builder)
+---- Thema: exe stürzt nach beenden ab sobald dll eingebunden ist (/Thread-exe-stuerzt-nach-beenden-ab-sobald-dll-eingebunden-ist)



exe stürzt nach beenden ab sobald dll eingebunden ist - NicoB - 21.11.2007 11:48

Hallo,
ich hab ein größeres Projekt das auch soweit funktioniert, darin sind eine Menge dll aufrufe auf die ich nicht verzichten kann.
Jetzt wollte ich da ich fertig bin eine exe daraus machen, funktioniert auch soweit, aber wenn ich dann das Programm beende kommt ein Windowsfehler. Dannach der Fehler :
Die Anweisung in "0x7c91eae0" verweist auf Speicher in "0x02782a10". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
Ich hab jetzt ein Vi mit einem dll aufruf aus meinem Projekt rausgedriffen und es in einem anderen Vi eingebunden. Der gleiche Fehler erscheint, daher geh ich mal davon aus das es an dem dll Afruf liegt, sobald ich den Asruf rausnehme funktioniert es.
Jetzt meine Frage muss ich beim kompelieren oder irgendwo sonst noch eine Einstellung machen damit dieser Fehler nicht mehr kommt?
Hier mal die Vi's, Projekt kann ich nicht hochladen, Dateityp ist mir nicht gestattet hochzuladen.

(VIs LV 8.2)


exe stürzt nach beenden ab sobald dll eingebunden ist - NicoB - 21.11.2007 13:26

hier mal noch ein einfacheres Vi, immer noch der Fehler, es liegt definitiv an dem call library Aufruf.
Ich weiß einfach keinen Rat mehr.

(VI LV 8.2)


exe stürzt nach beenden ab sobald dll eingebunden ist - IchSelbst - 21.11.2007 19:23

' schrieb:hier mal noch ein einfacheres Vi, immer noch der Fehler, es liegt definitiv an dem call library Aufruf.
Ich weiß einfach keinen Rat mehr.
Wenn du die Fehlermeldung weiter verfolgst, dann stellst du fest, dass der Fehler in NTDLL.dll passiert. In dieser DLL gibt es wohl sowas wie eine Dateninkonsistenz, die zu einem Fehler führt, wenn man eine StringList abfragen will, die keine Einträge hat. Ob das hier auch zutritt, kann ich natürlich nicht entscheiden.

Ich bin der Meinung, dass diese Fehlermeldung keinerlei negative Auswirkungen hat.

Du kannst die "Fehlermeldung" unterbinden, indem du die DLL User32.dll aus dem DATA-Verzeichnis löscht, das von LV bei der Erstellung der EXE automatisch angelegt wird. Wenn diese DLL nicht mehr da ist, benutzt die Applikation die DLL aus den Windows-Systemverzeichnis. Warum das dann geht, weis ich auch nicht.


exe stürzt nach beenden ab sobald dll eingebunden ist - NicoB - 21.11.2007 20:07

' schrieb:Wenn du die Fehlermeldung weiter verfolgst, dann stellst du fest, dass der Fehler in NTDLL.dll passiert. In dieser DLL gibt es wohl sowas wie eine Dateninkonsistenz, die zu einem Fehler führt, wenn man eine StringList abfragen will, die keine Einträge hat. Ob das hier auch zutritt, kann ich natürlich nicht entscheiden.

Ich bin der Meinung, dass diese Fehlermeldung keinerlei negative Auswirkungen hat.

Du kannst die "Fehlermeldung" unterbinden, indem du die DLL User32.dll aus dem DATA-Verzeichnis löscht, das von LV bei der Erstellung der EXE automatisch angelegt wird. Wenn diese DLL nicht mehr da ist, benutzt die Applikation die DLL aus den Windows-Systemverzeichnis. Warum das dann geht, weis ich auch nicht.
Danke für die Hilfe, ich hab es vorhin selbst raus gefunden, zwar nicht mit dem löschen sondern ich hab den Pfad der dll im Programm angegeben (spezify path on diagram angeklickt und dann den Pfad im Programm angegeben).
Dadurch wird dann beim erstellen der exe die dll nicht mitgegeben und es kommt zu keiner Fehlermeldung mehr.
Ich glaube das die user32.dll nicht so einfach mitgegeben werden kann, die linkt bestimmt noch zu mehreren anderen dll's die müsste man dann alle mit rein kopieren, aber ich bin da kein Fachmann dafür, vielleicht weiß einer wie es funktioniert.
Würde mich mal interesieren wie man es richtig macht mit dem mitgeben der dll.

Zu dem Fehler hast du zwar recht das er keine Auswirkung hat, aber die Software kann man mit soeinem Fehler keinen anderen zur Verfügung stellen ich arbeite ja nicht für MS :-)


exe stürzt nach beenden ab sobald dll eingebunden ist - rolfk - 22.11.2007 13:37

' schrieb:Wenn du die Fehlermeldung weiter verfolgst, dann stellst du fest, dass der Fehler in NTDLL.dll passiert. In dieser DLL gibt es wohl sowas wie eine Dateninkonsistenz, die zu einem Fehler führt, wenn man eine StringList abfragen will, die keine Einträge hat. Ob das hier auch zutritt, kann ich natürlich nicht entscheiden.

Ich bin der Meinung, dass diese Fehlermeldung keinerlei negative Auswirkungen hat.

Du kannst die "Fehlermeldung" unterbinden, indem du die DLL User32.dll aus dem DATA-Verzeichnis löscht, das von LV bei der Erstellung der EXE automatisch angelegt wird. Wenn diese DLL nicht mehr da ist, benutzt die Applikation die DLL aus den Windows-Systemverzeichnis. Warum das dann geht, weis ich auch nicht.

Diese System DLLs verwenden allerlei interne Tricks zum Resourcenhandling. Unter anderem auch globale Variablen und vor allem (und das ist hier wohl mehr oder weniger direkt das Problem) Handles (die in ntdll.dll verwaltet werden). Dadurch dass Du eine eigene Kopie von user32.dll in Deine Applikation lädst, gibt es ein Chaos mit dieser Resourcenverwaltung. Resourcen die in der lokalen user32.dll angelegt und verwendet werden stimmen nicht überein mit denen die in der Systemversion von user32.dll liegen und das knirscht irgendwann mal.

So ziemlich alle DLLs die standard mit Windows mitkommen, (und in system32 liegen) sollten NIEMALS mit einer Applikation mitkopiert werden und schon ganz sicher nicht im lokalen Verzeichnis der Applikation stehen. Wenn eine Applikation eine DLL anfordert ist das lokale Verzeichnis das erste das durchsucht wird und dann lädt er die während die Systemversion schon lange im globalen Systemspeicher anwesend ist und von da an ist es nur noch eine Frage der Zeit bis es crasht.

Rolf Kalbermatter