AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL aus DCU läßt sich nicht laden

Ein Thema von gmc616 · begonnen am 7. Jul 2008 · letzter Beitrag vom 8. Jul 2008
Antwort Antwort
Seite 2 von 2     12   
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 12:31
Das Arbeitsverzeichnis ändert sich beim Opendialog? Gut zu wissen.

Sollte aber nicht die Ursache sein, da ich alle Pfade, auch die der DLLs, beim App-Start auf absolute Pfade setze und gleich danach überprüfe ob alle meine Dlls sich in ihrem Unterverzeichnis befinden. Sollte eine DLL fehlen, startet das Programm nicht.

Es startet aber, nur das Laden der DLL schlägt fehl mit ERROR_MOD_NOT_FOUND.

Wohl gemerkt nur, wenn ich vor dem Erstellen der DLL die DCUs nicht lösche.
Eigenartigerweise tritt das Problem auch nur auf, wenn ich das Programm nicht aus der IDE starte.
Läuft das Programm (die Exe) in der IDE funktioniert das Laden. Starte ich gleich danach die das EXE-File schlägt das Laden fehl.
Das Beenden der "Dll-Projket-IDE" macht auch keinen Unterschied.

Lösche ich wieder alle DCUs, erstelle die DLL neu, beende alle IDEs, starte die EXE, läuft die Anwendung wieder ohne Probleme.

Ich habe nun alle Unit-Ausgabe-Verzeichnisse auf ein Verzeichnis gesetzt, welches sich nicht im Bibliotheks-Path oder im Suche-Path der IDE/Projekte befindet. So klappt das erst mal. Okay, das Kompilieren dauert nun ewig, aber es kommt was funktionierendes dabei raus.

Das kann aber nicht die Lösung sein.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 12:37
Hast du den mal unsere Vorschläge ausprobiert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 12:41
kannst du mal die "fehlerhafte" dll anhängen?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 15:12
Zitat von Luckie:
Hast du den mal unsere Vorschläge ausprobiert?
Ja, natürlich. Schon seit Anbeginn.
Was kann ich denn mehr tun, als vor direkt vor Loadlibrary mit FileExists zu prüfen, ob die DLL existiert.
Wie schon gesagt, die DLLs befinden sich genau an dem Ort, wo LoadLibrary sie laden soll.
Ich verwende zum Laden absolute Pfade, die beim Programmstart gesetzt werden.

Auch der Vorschlag von Apollonius die DLL mit FileCreate ( ... , GENERIC_READ ,..) gibt mir ein gültiges Handle zurück und ich könnte die DLLs sogar auslesen.

Nochmal: Es liegt nicht daran, dass evtl. die DLL nicht verfügbar ist. Sie ist genau da, wo sie geladen werden soll.

@SirThornberry
Leider darf ich die "defekte" DLL nicht heraus geben. Sorry, aber ist nicht meine Entscheidung.
Was hättest du denn vor damit?

Zum "Spaß" habe ich mal eine Test-Anwendung gebastelt, die nur LoadLibrary ruft (und FreeLibrary),
so das mir nix quer kommt, und siehe da, er lädt die DLL nicht -> 0-Handle !

hierfür habe ich die DLL ins gleiche Verzeichnis zu der Exe gelegt.

So nicht:LoadLibrary('C:\Programme\Test\meine.dll'); und so nicht: LoadLibrary(PChar(IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename)) + 'meine.dll')); und so auch nicht:LoadLibrary('.\meine.dll')); Erst wenn ich die DLL ohne die DCU's neu erstelle, funktionieren alle 3 Aufrufe.

Also ich glaube wirklich, den "Ort der DLL" kann ich zu 100% ausschließen.


Ich werd zum Elch!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 15:18
Moin gmc,

ich zitier' mich mal eben selber:

Zitat von Christian Seehase:
BTW:
Zitat von PSDK - LoadLibrary - Remarks:
The search path can be altered using the SetDllDirectory function. This solution is recommended instead of using SetCurrentDirectory or hard-coding the full path to the DLL.
Da LoadLibrary zuerst immer im Programmverzeichnis sucht, und diese ja bei Dir im Programmverzeichnis liegen, solltest Du es einfach mal mit
LoadLibrary('meine.dll'); ausprobieren.
In allen anderen Fällen gibst Du ja einen Pfad mit an, und wenn es .\ ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#16

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 15:41
Hab ich probiert. Das gleiche.
Auch die DLL ins System32 zu kopieren macht keinen Unterschied.

Aber Danke für den Tipp. Ich hab mal den Rechner nach evtl. anderen Version meiner DLL durchsucht. Hätte ja sein können das irgendwo im SearchPath eine andere "meine.dll" rumliegt. Aber Fehlanzeige, alles sauber.

Außerdem erklärt es nicht, warum
a.) das Laden, nach einem Neustellen plötzlich funktioniert, und
b.) der Code seit 2 Jahren an dieser Stelle problemlos läuft

Da meine DLLs aber in einem Unterverzeichnisse liegen (sollen), benutze ich doch den absoluten Pfad (full path).
Und wenn das nicht hard-coded ist ...

Vielleicht hilft wirklich nur das System platt zu machen und Delphi 7 neu zu installieren.
Was anderes fällt mir momentan nicht ein.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 16:46
Zitat von gmc616:
Da meine DLLs aber in einem Unterverzeichnisse liegen (sollen), benutze ich doch den absoluten Pfad (full path).
Und wenn das nicht hard-coded ist ...
... sollte man es mal mit MSDN-Library durchsuchenSetDllDirectory versuchen, wie in der Doku zu MSDN-Library durchsuchenLoadLibrary angegeben.

Hast Du mal die fertig compilierte Version, die auf Deinem Rechner nicht läuft auch auf einem anderen getestet?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#18

Re: DLL aus DCU läßt sich nicht laden

  Alt 8. Jul 2008, 17:11
Jupp. Deswegen ist das Problem ja erst aufgefallen.

Wenn ich die Exe oder die DLL in der IDE starte funktioniert ja alles tadellos.

Das Ganze hat sich bei mir so'n bissl eingeschliffen und so hab ich die DLL einfach (zum Glück nur) auf das TestSystem geschoben und dort hat's geknallt. Dann wieder hier in der IDE gestartet, lief. Nach einiger Zeit des grübelns bin ich erst auf die Idee gekommen, auf meinem Rechner hier die Binary zustarten und sieht da, Problem auch hier.

Nun hab ich das ganze auf mehreren Rechner getestet, alle Rechner verhalten sich gleich.
DLL aus DCU -> 0-Handle, DLL aus PAS funktioniert.


Ist das die Späte Rache dafür, dass ich so laut gelacht habe, als die Griechen als Europameister zur EM bereits in der Vorrunde ausgeschieden sind? ... Sorry.

Morgen bastel ich weiter ... für heute hab ich die Nase voll.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz