AGB  ·  Datenschutz  ·  Impressum  







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

DLL nicht automatisch laden

Ein Thema von venice2 · begonnen am 3. Aug 2020 · letzter Beitrag vom 3. Aug 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#11

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 13:34
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.
https://docs.microsoft.com/de-de/cpp...s?view=vs-2019
http://docwiki.embarcadero.com/RADSt...indows-only.29

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Aug 2020 um 13:40 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#12

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 13:47
Zitat:
Für Windows ist Delayed-Loading beim Programmcode viel "schöner"
Wenn ich das richtig verstehe dann verwendet C++ Delayed-Loading?
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.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#13

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 13:48
Zitat:
So ganz ohne Code
Ganz ohne. Hast du ihn für Delphi übersehen?
Ich korrigiere: Mit nur der Hälfte des notwendigen Codes. Wenn du sagst, mit Delphi geht etwas nicht, mit C++ (mit welchem überhaupt, und welcher Compiler?) aber schon, du aber nur Delphi-Code zeigst, kann keiner eine sinnvolle fundierte Antwort geben, wo genau der Unterschied ist. Nur Vermutungen sind möglich, und Empfehlungen wie z.B. meine mit dem Blick auf die Importtabelle.

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

Geändert von Dalai ( 3. Aug 2020 um 13:52 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#14

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 13:55
Zitat:
Soweit ich weiß bedeutet statisches Linken bei C++, dass die DLLs ins Programm (also in die EXE) einkompiliert werden.
Ok. Gebe mich damit zufrieden dann erklärt das einiges, nur nicht das die Funktionen wenn die DLL mit ein kompiliert wird und diese nicht vorhanden ist nicht funktionieren.

Trotzdem Danke.

Zitat:
kann keiner eine sinnvolle fundierte Antwort geben
Kann ich verstehen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#15

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 13:57
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#16

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 13:58
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.
Danke für die Information habe wieder etwas gelernt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#17

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 14:03
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Aug 2020 um 14:41 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#18

AW: DLL nicht automatisch laden

  Alt 3. Aug 2020, 14:13
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.

Geändert von venice2 ( 3. Aug 2020 um 14:16 Uhr)
  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 22:48 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