Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL Frage (https://www.delphipraxis.net/51417-dll-frage.html)

N47R0N 12. Aug 2005 00:47


DLL Frage
 
Hi @ ALL

Ich habe vor Kurzem ein Programm geschrieben und nun ein Update rausgebracht , das Update ist sehr klein in Form einer DLL datei nu wollt ich ma wissen wie ich diese Datei in eine Form einbinden kann ???

Das ganse soll dann so laufen man öffnet meinen kleinen Update installer (Form) und klickt dann auf Update nun soll die in die Form eingebundene DLL zu einem bestimmten Ordner entpackt werden.

Wie kann man sowas bewerstelligen???

danke

Luckie 12. Aug 2005 00:52

Re: DLL Frage
 
Du hinterlegst in der Registry wo dein Programm hininstalliert wurde und mit deinem Update-Programm liest du den Pfad aus der Registry und kopierst die DLL dann in das Verzeichnis. Oder wo liegt jetzt dein Problem?

Zitat:

nun soll die in die Form eingebundene DLL zu einem bestimmten Ordner entpackt werden
Aber erklär mir mal, wie du was virtuelles, ein Fenster (Form), auf der Festplatte als Datei ablegen willst. :roll:

Eine gescheite Formulierung des Problems, kann ungemein bei der Lösung des selbigen helfen. Und da sollte man sich schon mal etwas länger für Zeit nehmen, anstatt das hier so hin zu rotzen.

N47R0N 12. Aug 2005 01:22

Re: DLL Frage
 
Mein Problem :

Wie bindet man eine dll in ein Programm ein ???

So das sie Später aus diesem Programm auch wieder rausextrahiert werden kann

(wie ein Installer nur ohne angabe eines installationsverzeichnis

Thorben86 12. Aug 2005 01:34

Re: DLL Frage
 
Hänge die dll einfach als Resource an deine exe an, dann kannst du sie später einfach wieder rausextrahieren.

N47R0N 12. Aug 2005 01:44

Re: DLL Frage
 
ja wie macht man das den???

Luckie 12. Aug 2005 01:47

Re: DLL Frage
 
Delphi-Referenz durchsuchenTResourceStream. Wie man eine DLL in die Ressource der Anwendung bekommt und Hilfe zu TResourceStream findest du hier im Forum und in der Delphi Hilfe.

N47R0N 12. Aug 2005 01:53

Re: DLL Frage
 
kannste mir nicht einen genauen link geben.

Ich arbeite schon 15 Stunden an diesem Update und muss das noch fertig machen .

Luckie 12. Aug 2005 02:54

Re: DLL Frage
 
Äh hallo?!? Den Suchbegriff wirst du ja wohl noch selber in die Forensuche und in die Delphihilfe eingeben können. Und wenn du es fertigbekommen musst, was geht wohl schneller, hier auf eine Lösung zu warten oder mal eben selber schnell in der Hilfe nachzugucken? In der Hilfe findest du übrigens bestimmt ein komplettes Beispiel. :roll:

N47R0N 12. Aug 2005 10:22

Re: DLL Frage
 
lol???

Erstmal BIG THX Lucki , war wohl etwas zu müde :corky:

Olli 12. Aug 2005 10:39

Re: DLL Frage
 
Alternativ kannst du mal nach Hier im Forum suchenPutBinResTo suchen. Da kommst du auch ohne TRessourceStream aus ;) ... die neueste Version findest du übrigens in meinem Hooktut, soweit ich das überschauen kann.

N47R0N 12. Aug 2005 11:18

Re: DLL Frage
 
So mein hauptsächliches Problem ist das ich keine Resource Datei erstellen kann weil ich die Brcc32.exe nicht finden kann , sie ist nicht in meinem Delphi bin Ordner

Luckie 12. Aug 2005 11:20

Re: DLL Frage
 
Sie sollte im bin Ordner liegen. Und sie ist bestimmt da.

N47R0N 12. Aug 2005 11:28

Re: DLL Frage
 
Ich bin sicher das sie nicht dort liegt , hab sogra die Windows suche durchlaufen lassen und es wurde keine Datei mit dem namen gefunden

( Hab Delphi 7 Enterprise )

Olli 12. Aug 2005 11:57

Re: DLL Frage
 
Also, die ist unter %ProgramFiles%\<Dein-Delphi-Verzeichnis>\bin

Alternativ kannst du die RC.EXE aus dem PSDK benutzen, die sowieso bessere Dienste leistet, ganz einfach weil sie zB auch Unicode-Ressourcen unterstützt - meine Version des Borland-Ressourcencompilers tut dies nicht!

N47R0N 12. Aug 2005 12:30

Re: DLL Frage
 
Ja ich habs schon gefunden hatte nur ein kleines Problem mit Delphi

N47R0N 12. Aug 2005 12:39

Re: DLL Frage
 
Und wie funktioniert das jetzt ?? , hab noch nie ne resource Datei erstellt oder in mein Programm eingebunden .

Hab schon die Suche verwendet aber ich versteh das halt nicht richtig

Wie kann ich meine DLL datei als Resource in mein Programm einbinden und Später durch einen Button klick in meinem Programm dafür sorgen das die datei in einen bestimmten Ordner wieder entpackt wird?

Sorry wenn ich alles andere nicht so verstanden habe , aber ich bin halt noch ganz am anfang in der Delphi welt :-D

Danke für Antworten

Luckie 12. Aug 2005 12:49

Re: DLL Frage
 
All diese Fragen findest du hier im Forum beantwortet.

Olli 12. Aug 2005 13:09

Re: DLL Frage
 
Wie du das nachher mit "dem Knopf" verbindest, mußt du schon selber rausbekommen. Aber zB PutBinToRes aus meinem letzten Hooktut enthält alles nötige. So zB die RC-Datei:

Code:
[color=red]HOOKDLL[/color]                [color=green]RCDATA[/color] DISCARDABLE    [color=blue]"..\\KbdHook.dll"[/color]
Wobei die Syntax eindeutig ersichtlich ist ...
Rot: Name (kann auch eine Zahl kleiner $FFFF und größer 0 sein)
Grün: Typ
Blau: Pfad zur einzubindenden Datei

Und dann hätten wir noch die Funktion (dies ist die neueste Version von PutBinResTo, auch wenn ich sie umbenannt hatte ;)).
Delphi-Quellcode:
function ExtractResTo(Instance: LongWord; BinResName, NewPath, ResType: PChar): Boolean;
(*******************************************************************************
 Function:  ExtractResTo
 Returns:   Boolean (true=success)
 Version:   Function version 3.0[mod]
             Parameters modified, SEH stripped.
 *******************************************************************************)
var
  ResSize,
    HG,
    HI,
    SizeWritten,
    hFileWrite: LongWord;
begin
  result := false;
  HI := FindResource(Instance, BinResname, ResType);
  if HI <> 0 then
  begin
    HG := LoadResource(Instance, HI);
    if HG <> 0 then
    begin
      ResSize := SizeOfResource(Instance, HI);
      hFileWrite := CreateFile(NewPath, GENERIC_READ or GENERIC_WRITE,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS,
        FILE_ATTRIBUTE_ARCHIVE, 0);
      if hFileWrite <> INVALID_HANDLE_VALUE then
      begin
        result := (WriteFile(hFileWrite, LockResource(HG)^, ResSize,
          SizeWritten, nil) and (SizeWritten = ResSize));
        CloseHandle(hFileWrite);
      end;
    end;
  end;
end;
Wie man sieht, kann man als ersten Parameter die Instanz übergeben (kann also die Ressource auch aus einer externen Datei laden), danach den Namen der Ressource, den Zielpfad und zuguterletzt den Ressourcentyp.

Viel Spaß damit ;)


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