![]() |
Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Hallo
ich habe mehrere Dateien in eine dll gespeichert. Wie kann ich diese wieder von dll auf die Festplatte speichern. Allerdings die Namen meiner Dateien weiß ich natürlich Meine Dateien heißen :test01.mp3 bis test11.mp3 |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
was verstehst du unter "in DLL gespeichert"? Wie sind denn die Dateien in der DLL drin? Als Ressourcen? Dann einfach mit meinem ResourceStream.
|
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
meinedaten.RC :
video1.mp3 23 "video1.mp3"
Delphi-Quellcode:
Fehler : video1.mp3 nicht gefunden
implementation
{$R *.dfm} {$R meinedaten.RES} procedure TForm1.Button1Click(Sender: TObject); var myRes : TResourceStream; begin myRes:=TResourceStream.Create(Hinstance,'video1.mp3','23'); myRes.SaveToFile('video1.mp3'); myRes.free; end; |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Hinstance = Handle des aktuellen Moduls, also in diesem Fall von der EXE.
Du brauchst hier natürlich das Handle der DLL :zwinker: ![]() Was soll denn 23 für ein ResType sein? PS: 23 <> '23' |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Die Ressourcen sind sowohl in .Res als auch in einer .dll Datei
Ich möchte mit meinem Code zuerst versuchen die Dateien aus Ressource zu holen. |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Versuch es mal mit RCDATA (in der RES) und RT_RCDATA im Programm.
|
AW: Wie kann man Dateien von einer Res / DLL Datei hollen und auf HD speichern?
Die RC kann ich leider nicht ändern
test1.mp3 23 "test1.mp3" So ist in .Res gespeichert leider |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Ähh entschuldige die Frage, aber wei´t du ungefähr was du da überhaupt machst?
|
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Das Problem liegt nur an .RC Datei
die Datei .rc wurde leider in diesem Form erstellt : resource.rc : test1.mp3 23 test1.mp3 wenn aber die resource so wäre : test1.mp3 RCDATA test1.mp3 dann ist kein Problem die Dateien von rers zu holen :
Delphi-Quellcode:
und so geht ohne Probleme
var
RS: TResourceStream; begin RS := TResourceStream.Create(0, 'test1.mp3', RT_RCDATA); RS.SaveToFile('test1.mp3'); RS.Free(); aber leider ist die .rc statt RCDATA, 23 erstellt 23 gilt algemeine für HTML files Ich erhalte immer diese Fehlermeldung : test1.mp3 nicht gefunden ich habe versucht auch mit dem code :
Delphi-Quellcode:
RS := TResourceStream.Create(0, Pchar('test1.mp3'), Pchar('23'));
|
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Microsoft hat ein etwas seltsames System um Resource Typen zu kennzeichnen.
Hier die ![]() Einerseits ist der Resourcetyp eine Zahl, andererseits wird er über einen PCHAR übergeben. Die Idee dahinter ist wohl, dass man die API so offen halten wollte, dass man in Zukunft neben den Zahlenwerten auch Strings übergeben kann. Das Makro MAKEINTRESOURCEA erledigt für C-Compiler den Trick:
Code:
Daher:
#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))
Delphi-Quellcode:
Es ist natürlich eine Verletzung der Konventionen,
const
_RT_HTML = 23; // bitte prüfen, ob RT_HTML nicht schon in Unit Windows definiert wurde ... RS := TResourceStream.Create(0, Pchar('manual.html'), MAKEINTRESOURCE(_RT_HTML)); wenn hinter der Resource RT_HTML ein MP3-Video abgelegt wird. Das sollte man nicht tun. Richtig wäre hier der Typ RT_RCDATA. |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Zurück zu dem Thema Leute
ich habe mehrere Dateien in eine .dll als Ressource gespeichert. Wie kann ich diese wieder von dll auf die Festplatte speichern. Allerdings die Namen meiner Dateien weiß ich natürlich dll Datei heisst : meineDll.dll Datei-Name in Ressource : test01.mp3 RT_RCDATA test11.mp3 Wie hole ich die Datei test1.mp3 aus der datei meineDll.dll und speichere ich auf die Festplatte ? |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Delphi-Quellcode:
HInstance muss natürlich das Handle der DLL sein, d.h. du musst vorher mit LoadLibrary die DLL laden.
procedure TForm1.Button1Click(Sender: TObject);
var myRes : TResourceStream; begin myRes:=TResourceStream.Create(Hinstance,'video1.mp3','23'); myRes.SaveToFile('video1.mp3'); myRes.free; end; |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Liste der Anhänge anzeigen (Anzahl: 1)
Damit das hier mal ein Ende hat.
Ressourcenskript:
Code:
DLL:
Anne RCDATA Anne.jpg
Delphi-Quellcode:
Exe:
library ResDLL;
{$R resource.res} begin end.
Delphi-Quellcode:
Und das ganze noch mal als lauffähige Demo im Anhang.
procedure ExtractResFromDLL(DLLName: String; ResName: String; Filename: String; ResType: PChar);
var dll: THandle; ResStream: TResourceStream; begin dll := LoadLibraryEx(PChar(DLLName), 0, LOAD_LIBRARY_AS_DATAFILE); if dll <> 0 then begin ResStream := TResourceStream.Create(dll, ResName, RT_RCDATA); try try ResStream.SaveToFile(Filename); except on E: Exception do raise Exception.Create(E.Message); end; finally ResStream.Free; end; end else RaiseLastOSError; end; procedure TForm1.Button1Click(Sender: TObject); begin try ExtractResFromDLL(ExtractFilePath(ParamStr(0)) + 'ResDLL.dll', 'Anne', ExtractFilePath(ParamStr(0)) + 'Anne.jpg', RT_RCDATA); except on E: Exception do ShowMessage(E.Message); end; end; |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Danke @Luckie für Deine Mühe
es hat geklappt :) |
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Woran hat es gelegen? Und nimmst du jetzt meine Funktion?
|
AW: Wie kann man Dateien von einer DLL Datei hollen und auf HD speichern?
Mit Deiner Funktion hat es geklappt natürlich :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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