![]() |
AW: DLL nicht automatisch laden
Statisches Linken (im Delphi/Windows), da wird der Link in die Import-Tabelle des PE-Headers eingetragen,
welche von Windows gefüllt wird, bevor der ProgrammCode anfängt mit Arbeiten. Beim Delayed-Loading gibt es auch diese "statische" Tabelle, aber die ist zu Beginn mit Dummyprozeduren gefüllt. Und erst beim Aufruf einer dieser Prozeduren wird die DLL geladen und die Tabelle mit den richtigen Zeigern gefüllt. ![]() ![]() Beim dynamischen Laden führt der Entwickler das LoadLibrary aus und sucht via GetProcAddress seine Methoden und speichert sie in eigenen Variablen. Für Windows ist Delayed-Loading beim Programmcode viel "schöner", wenn man damit leben kann, dass Microsoft hier eine echt besch*** Fehlermeldung eingebaut hat, wenn das Laden fehlschlägt, sollte die DLL/Funktion fehlen. Außerdem wurde im Delphi das Entladen nicht implementiert. |
AW: DLL nicht automatisch laden
Zitat:
Oder ist Delayed-Loading = dynamisches laden? In c++ wird aber statisch geladen. Entschuldige werde da nicht so richtig draus schlau was du mir da sagen willst. |
AW: DLL nicht automatisch laden
Zitat:
Soweit ich weiß bedeutet statisches Linken bei C++, dass die DLLs ins Programm (also in die EXE) einkompiliert werden. Das macht sich dann natürlich bei der Größe bemerkbar. Grüße Dalai |
AW: DLL nicht automatisch laden
Zitat:
Trotzdem Danke. Zitat:
|
AW: DLL nicht automatisch laden
Was C++ verwendet weiß ich nicht, aber ich wäre davon ausgegangen, dass es standardmäßig auch nur ein normales statisches Linken benutzt.
Deleyed-Loading ist wie dynamisches laden, aber mit der statischen deklaration. Man deklariert statisch, scheibt "dynamisch" dran und der Compiler passt es im Codegenaerator dann an. |
AW: DLL nicht automatisch laden
Zitat:
|
AW: DLL nicht automatisch laden
Ja stimmt, der Begriff "Linken" ist hier etwas doof.
In C++ kann man eine DLL LIB/OBJ/... statisch Linken, wobei vom "Linker" der Code der DLL/LIB in die eigene EXE eingefügt wird. In Delphi geht sowas auch, wo via {$L} bzw. {$LINK} der Code einer vorkompilierten OBJ ins eigene Programm eingebunden/gelinkt wird. Delphi nutzt es, um z.B. die Funktionen für ZLib, RegEx, JPEG, MIDAS oder eben dieses DelayedLoading "direkt" einzubinden. Dann gibt es eben auch noch die Links zu einer DLL, welche in der Import-Tabelle eingetragen wurden. (das macht Delphi standardmäßig) |
AW: DLL nicht automatisch laden
Ich habe es jetzt so ausgelegt das es beim Dynamischen laden funktioniert. (Das es damit geht war mir klar, aber es war nicht das Thema)
Kann die DLL jetzt aus dem Anwendungspfad entfernen wenn sie nicht gefunden wird dann schütze ich die einzelnen Aufrufe mit einer Bool Value. Danke euch für die Informationen. Da ich mit Delphi arbeite hat sich das mit C++ erstmal erledigt. Wollte nur mal wissen warum was wo geht oder nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz