exe stürzt nach beenden ab sobald dll eingebunden ist
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!
21.11.2007, 11:48 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2007 12:53 von jg.)
exe stürzt nach beenden ab sobald dll eingebunden ist
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)
21.11.2007, 13:26 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2007 12:52 von jg.)
exe stürzt nach beenden ab sobald dll eingebunden ist
' 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.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
exe stürzt nach beenden ab sobald dll eingebunden ist
' 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
' 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.