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 Datei zur Resource datei *.res machen (https://www.delphipraxis.net/77574-%2A-dll-datei-zur-resource-datei-%2A-res-machen.html)

newuser01 21. Sep 2006 11:32


*.dll Datei zur Resource datei *.res machen
 
Hallo wie in diesem Beitrag von "Carlo91" beschrieben kann man eine dll Datei ja als Resource im Projekt einbinden. Aber wie wird erst einmal eine dll-datei zur Resource-Datei also xy.dll zur xy.res ?

Luckie 21. Sep 2006 12:59

Re: *.dll Datei zur Resource datei *.res machen
 
Bitte genau lesen:
Zitat:

Das ist eine exe die die bass.dll aus den Resourcen entpackt (mit sourcecode)!

newuser01 21. Sep 2006 14:05

Re: *.dll Datei zur Resource datei *.res machen
 
Zitat:

Das ist eine exe die die bass.dll aus den Resourcen entpackt (mit sourcecode)!
Das weiß ich doch nur liegt dem Projekt von "Carlo91" keine bass.dll bei sondern eine DLL.res also wurde diese *.res irgendwie aus der bass.dll erstellt und genau das will ich wissen wie das geht

Prototypjack 21. Sep 2006 14:09

Re: *.dll Datei zur Resource datei *.res machen
 
Moin!
Die DLL wird nicht zur RES sondern sie befindet sich in ihr. Du musst dir das wie ein Paket vorstellen.
Das ganze kannst du mit dem Resource-Compiler von Borland mittels eines RC-Sriptes leicht selbst erstellen.
Da ich aber schon seit längerem keine RES Dateien mehr erstellt habe kann ich dir jetzt leider den genauen Code nicht nennen, entschuldigung.

Gruß,
Max

hoika 21. Sep 2006 14:10

Re: *.dll Datei zur Resource datei *.res machen
 
Hallo,

http://delphi.about.com/od/objectpas.../aa021301a.htm

dort auf die 2. Seite gehen.


Heiko

Muetze1 21. Sep 2006 14:11

Re: *.dll Datei zur Resource datei *.res machen
 
Leg dir eine Textdatei an. Nenne Sie "xxx.rc" und schreibe folgendes hinein:

Zitat:

Zitat von xxx.rc
SYMBOLNAME RCDATA bass.dll

Danach das ganze mit folgendem Aufruf des Borland Resourcen Compilers in dem Verzeichnis zu einer RES Datei compilieren:
Zitat:

Zitat von command line
brcc32 xxx.rc

Danach hast du eine RES Datei welche noch per "{$R xxx.res}" im Quelltext in die EXE kompiliert werden muss. Die DLL Extraction aus den Resourcen braucht ja einen Identifier um die Daten extrahieren zu können. Dies ist der erste Begriff in der RC Datei, also hier "SYMBOLNAME".

newuser01 21. Sep 2006 15:14

Re: *.dll Datei zur Resource datei *.res machen
 
versteh ich nicht ganz also in der Unit wird die res wie folgt aufgerufen

Delphi-Quellcode:
var
  Form1: TForm1;
  DLLRes: TResourceStream;


implementation

uses Unit2;

{$R *.DFM}
{$R DLL.res}
Delphi-Quellcode:
//und hier wird die dll entpackt falls sie nicht vorhanden ist
if not FileExists(ExtractFilePath(Application.ExeName)+'\bass.dll') then
begin
  DLLRes :=TresourceStream.CreateFromID(0, 101, PChar('DLL'));
  DLLRes.SaveToFile(ExtractFilePath(Application.ExeName)+'\bass.dll');
end
   else
       begin
        // dll vorhanden
end;//if

Also was genau muss ich nun in der DLL.rc schreiben um genau die selbe DLL.res mit "brcc32 DLL.rc" zu erzeugen ?

hoika 21. Sep 2006 15:42

Re: *.dll Datei zur Resource datei *.res machen
 
Hallo,

nehmen wir mal an, die Dll heisst Help.dll.

Deine erzeugst du eine Textdatei dll.rc,
die nur die folgenden Zeile besitzt:


MeineHelpDLL RCDATA Help.dll


Dann schnappst du dir den brc32
und rufst ihn auf mit brc32 -r dll.rc.

Damit bekommst du eine dll.res, die die Help.dll enthält.
"MeineHelpDLL" brauchst du für FindResource.


Heiko

newuser01 21. Sep 2006 15:46

Re: *.dll Datei zur Resource datei *.res machen
 
was meinst du mit "FindResource" ?
Delphi-Quellcode:
//"FindResource" meinst du damit diese Zeile und wenn ja wie wird dann die Resource hier identifiziert
DLLRes :=TresourceStream.CreateFromID(0, 101, PChar('DLL'));

hoika 22. Sep 2006 07:01

Re: *.dll Datei zur Resource datei *.res machen
 
Hallo,

in meinem Fall

Create(0, 'MeineHelpDLL', 'RT_RCDATA');

Wie du siehst, nehme ich das normale Create,
weil ich keine ResId habe.


Heiko

newuser01 22. Sep 2006 11:12

Re: *.dll Datei zur Resource datei *.res machen
 
Hallo Heiko

Es funktioniert leider nicht mit der bass.dll ich habe folgendes gemacht

Delphi-Quellcode:
//bass.rc erstellt mit folgenden Inhalt

bassdll RCDATA bass.dll

//danach mit "brc32 -r bass.rc" Compiliert
als nächstes habe ich die bass.res in Delphi eingebunden mit

Delphi-Quellcode:
var
  Form1: TForm1;
  DLLRes: TResourceStream;


implementation

uses Unit2, Unit3;

{$R *.DFM}
{$R bass.res}
und so wird sie entpackt

Delphi-Quellcode:

  if not FileExists(ExtractFilePath(Application.ExeName)+'\bass.dll') then
  begin
    //wenn dll nicht vorhanden
    DLLRes :=TResourceStream.Create(0, 'bassdll', 'RT_RCDATA');
    DLLRes.SaveToFile(ExtractFilePath(Application.ExeName)+'\bass.dll');
  end
     else
         begin
  end;//if
Das funktioniert aber leider nicht die DLL wird nicht entpackt. Ich habe jetzt mit Tipp von "Carlo91" mit Visual C++ eine *.res Scriptdatei erstellt und die bass.dll importiert danach als bass.res abgespeichert und mit dieser*res funktioniert es jetzt

Entpackt wird sie so

Delphi-Quellcode:
DLLRes :=TResourceStream.CreateFromID(0, 101, PChar('DLL'));
DLLRes.SaveToFile(ExtractFilePath(Application.ExeName)+'\bass.dll');
//ich könnte auch zwei dll's einbinden muss dann nur die ID ändern also nicht 101 sondern 102 das funktioniert bestens anders bekomme ich es leider nicht hin :mrgreen:
DLLRes :=TResourceStream.CreateFromID(0, 102, PChar('DLL'));

Flocke 22. Sep 2006 11:49

Re: *.dll Datei zur Resource datei *.res machen
 
Zitat:

Zitat von newuser01
Delphi-Quellcode:

  if not FileExists(ExtractFilePath(Application.ExeName)+'\bass.dll') then
  begin
    //wenn dll nicht vorhanden
    DLLRes := TResourceStream.Create(0, 'bassdll', 'RT_RCDATA');
    DLLRes.SaveToFile(ExtractFilePath(Application.ExeName)+'\bass.dll');
  end
     else
         begin
  end;//if
Das funktioniert aber leider nicht die DLL wird nicht entpackt.

Das würde auch funktionieren, wenn du die Anführungszeichen um RT_RCDATA weglässt - das ist nämlich eine Konstante.

newuser01 22. Sep 2006 13:48

Re: *.dll Datei zur Resource datei *.res machen
 
kleiner Fehler große Wirkung DANKE Flocke und allen anderen auch !!!

newuser01 25. Sep 2006 16:46

Re: *.dll Datei zur Resource datei *.res machen
 
Dieser Beitrag hier "*dll Datei aus Resource entpacken" wäre doch für die Code-Library geeignet oder was denkt ihr darüber ?


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