Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL zur laufzeit überschreiben? (https://www.delphipraxis.net/37089-dll-zur-laufzeit-ueberschreiben.html)

paresy 30. Dez 2004 21:06


DLL zur laufzeit überschreiben?
 
Ich habe in meinem Projekt mehrere DLLs die beim start des programms dynamisch geladen werden.
Nun möchte ich gerne eine DLL updaten indem ich diese überschreibe ( z.b. einfach in delphi rekompiliren ) und dann per shell notify auf das change ereignis (überschreiben) diese entlade/neu lade. (die shell notify sache stellt kein problem dar)

Nur soll das Hauptprogramm dabei halt nicht geschlossen werden, weil ja nur eine dll upgedated werden muss und es somit nicht unbedigt nötig wäre alles neu zu laden. Das Problem ist, dass sobald ich die DLL per LoadLibrary lade, diese writelocked ist.

Gibts da vielleicht nen netten workaround?

Ich dachte schon die datei vorm laden nach dateiname.dll.lock umzubenennen damit der dateiname dateiname.dll frei ist... aber die sache wird mir dann zu frickelig :)... deshalb frag ich erstmal lieber hier :wink:

grüße, paresy

c113plpbr 30. Dez 2004 22:08

Re: DLL zur laufzeit überschreiben?
 
Trenne dich von allen aus der DLL exportierten funktionen, rufe FreeLibrary auf, überschreibe die dll, und lade sie erneut.

das wäre meine lösung,
ciao, Philipp

paresy 31. Dez 2004 06:21

Re: DLL zur laufzeit überschreiben?
 
Zitat:

Zitat von c113plpbr
Trenne dich von allen aus der DLL exportierten funktionen, rufe FreeLibrary auf, überschreibe die dll, und lade sie erneut.

das wäre meine lösung,
ciao, Philipp

ich wollte nur gerne die möglichkeit haben die dll quasi einfach zu überschreiben, sodass wenn ich in delphi die sache rekompiliere, delphi die datei überschreibt und mein hauptpogramm sie dann läd. für deine idee müsste ich erst in delphi nen addin schreiben welches vor jedem kompilieren meine hauptpogramm ne message schickt dass er jene DLL entladen soll.

grüße, paresy

supermuckl 31. Dez 2004 06:28

Re: DLL zur laufzeit überschreiben?
 
hab ich richtig verstanden, das du in delphi (IDE) die dll compilieren können willst, und dein programm lädt die dann automatisch nach und benutzt sie?

compiliere doch einfach in ein unterverzeichnis und lass dein programm da ein auge drauf halten und wenn da eine dll liegt (die neu compilierte) dann soll das programm die alte auslinken, die datei ersetzen, wieder linken

Christian Seehase 31. Dez 2004 14:21

Re: DLL zur laufzeit überschreiben?
 
Moin paresy,

und die Überwachung kannst Du mit Hier im Forum suchenReadDirectoryChangesW oder Hier im Forum suchenFindFirstChangeNotification durchführen.

paresy 1. Jan 2005 15:30

Re: DLL zur laufzeit überschreiben?
 
Zitat:

Zitat von supermuckl
hab ich richtig verstanden, das du in delphi (IDE) die dll compilieren können willst, und dein programm lädt die dann automatisch nach und benutzt sie?

compiliere doch einfach in ein unterverzeichnis und lass dein programm da ein auge drauf halten und wenn da eine dll liegt (die neu compilierte) dann soll das programm die alte auslinken, die datei ersetzen, wieder linken

jupp die idee ist im ansatz ganz gut.... nur wenn ich z.b. die dll's nach /dlls kompiliere muss mein programm die dlls auf einem anderen ordner laden damit delphi im nachhinein noch zugriff hat.

bzw werd ichs so machen dass delphi alles nach /upd kompiliert und mein hauptprogramm am start alles von /upd nach /dll kopiert, die dlls aus /dll läd und danach in /upd auf updates wartet :)

vielleicht etwas kompilizert, aber wird den zweck mit dem geringsten programmieraufwand erledigen :)

dank an alle die sich den kopf darüber zerbrochen haben :wink:

grüße, paresy

paresy 1. Jan 2005 18:11

Re: DLL zur laufzeit überschreiben?
 
hmm nu hab ich mir damit ziemlich ins knie geschossen :(

da ich jetzt alles von /upd nach /dll verschiebe und dort lade... kann ich die dll nicht mehr mit delphi debuggen, da sie ja nicht aus /upd heraus geladen wird sondern /dll...

kann man irgendwo den dll pfad manuell einstellen die er debuggen soll?

paresy :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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