AGB  ·  Datenschutz  ·  Impressum  







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

DLL zur laufzeit überschreiben?

Ein Thema von paresy · begonnen am 30. Dez 2004 · letzter Beitrag vom 1. Jan 2005
Antwort Antwort
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#1

DLL zur laufzeit überschreiben?

  Alt 30. Dez 2004, 22:06
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

grüße, paresy
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#2

Re: DLL zur laufzeit überschreiben?

  Alt 30. Dez 2004, 23:08
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
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#3

Re: DLL zur laufzeit überschreiben?

  Alt 31. Dez 2004, 07:21
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
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: DLL zur laufzeit überschreiben?

  Alt 31. Dez 2004, 07:28
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: DLL zur laufzeit überschreiben?

  Alt 31. Dez 2004, 15:21
Moin paresy,

und die Überwachung kannst Du mit Hier im Forum suchenReadDirectoryChangesW oder Hier im Forum suchenFindFirstChangeNotification durchführen.
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
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#6

Re: DLL zur laufzeit überschreiben?

  Alt 1. Jan 2005, 16:30
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

grüße, paresy
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#7

Re: DLL zur laufzeit überschreiben?

  Alt 1. Jan 2005, 19:11
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:45 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