![]() |
Ressource in einer DLL von außen aufrufen
Hallo. Ich habe eine Ressourcen-DLL in Delphi gemacht und habe das jetzt so hinbekommen, dass ich die Ressource, hier ein Bitmap, direkt im Explorer aufrufen kann...
res://C:\ressource.dll/bitmap.bmp Jetzt wollte ich die Ressource in eine TImage laden und es geht nicht: Die Funktion LoadFromFile kapiert keine res:// Dateien. :( In einigen C++ Programmen hab ich das schon gesehen, dass HTMLs in eine DLL geladen werden. Wie kann ich das mit Delphi machen? Muss ich da die Funktion LoadFromFile umschreiben, oder geht das auch leichter? (Ich will auch DelphiX, WaveSounds, Animationen und Texte in die DLL einfügen, deswegen wäre das eine schlechte Lösung) Am besten wäre es natürlich, wenn eine Funktion sich die Datei res://C:\ressource.dll/bitmap.bmp holen, tempoär speichern und dann den neuen Dateinamen ausgeben würde... Etwa so...
Code:
Danke schon mal im vorraus.
Image1.LoadFromFile(Translate('res://res://C:\ressource.dll/bitmap.bmp'));
|
Re: Ressource in einer DLL von außen aufrufen
Weil es Quatsch ist. Was der Internet Explorer und Explorer machen ist etwas komplett anderes. Die handlen das selber ... wenn du exakt sowas willst, mußt du es auch selber handlen.
1. LoadLibrary (um die DLL zu laden) -> hModule (Modul-Handle) 2. hBitmap := LoadBitmap(hModule, ...) ... Dann damit arbeiten ... das Handle sollte man TBitmap zuweisen können! |
Re: Ressource in einer DLL von außen aufrufen
Schau dir mal TBitmap in der Hilfe an, besonders .LoadFromResourceName()/.LoadFromResouceID().
Delphi-Quellcode:
Gruß Hagen
procedure LoadBitmapFromResource(Bitmap: TBitmap; const FileName,BitmapName: String);
begin Lib := LoadLibraryEx(FileName, LOAD_LIBRARY_ASDATAFILE); if Lib = 0 then raise Exception.Create('Ungültige DLL'); try Bitmap.LoadFromResourceName(Lib, BitmapName); finally FreeLibrary(Lib); end; end; |
Re: Ressource in einer DLL von außen aufrufen
@Hagen: Da hat dich dein Ggedächnis im Stichgelassen. In meinem pDSK ist LoadLibraryEx wie folgt deklariert:
Code:
Wobei:
HMODULE LoadLibraryEx(
LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags ); Zitat:
Delphi-Quellcode:
Aber das ist Geschmackssache.
Lib := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
if Lib <> 0 then begin try ...; finally FreeLibrary(Lib); end; end else RaisLastOSError(); |
Re: Ressource in einer DLL von außen aufrufen
Richtig es ist Geschmackssache. Ich bevorzuge bei solchen kurzen Abfragen die sofortige Auswertung da dadurch der Source besser sequentiell lesbar wird. Lade Library, wenn Fehler raise Exception, ansonsten weiter im Source.
Falls ich die Abfrage so wie du gestalte dann aber auf alle Fälle so :)
Delphi-Quellcode:
Gruß Hagen
begin
Lib := LoadLibrary() if Lib <> 0 then try finally FreeLibrary(Lib); end else raise Exception.Create(); end; PS: appropo Gedächtnis, 5:15 Uhr und schon 18h vor der Kiste was soll da das Hirn noch bringen ? :) |
Re: Ressource in einer DLL von außen aufrufen
Hallo. Ich hab das jetzt so:
Delphi-Quellcode:
Jetzt kommt aber die Meldung, dass Die Ressource "Test.bmp" nicht gefunden worden ist. Was mache ich falsch?
procedure TForm1.Button1Click(Sender: TObject);
var Lib: Integer; begin Lib := LoadLibraryEx('Ressource.dll', 0, LOAD_LIBRARY_AS_DATAFILE); if Lib <> 0 then try Image1.Picture.Bitmap.LoadFromResourceName(Lib, 'TEST.BMP'); finally FreeLibrary(Lib); end else raise Exception.Create('Fehler in der Ressourcen-DLL...'); end; Wie muss ich es eigentlich machen, wenn ich DelphiX-Dateien, Texte für Memos ect. auch einbinden will? Gibts denn keine RessourceToStream-Funktion? [edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit] |
Re: Ressource in einer DLL von außen aufrufen
Ich denke mal, dass der Fehler in der DLL liegt...
Was mache ich falsch?
Code:
Ich hab die Ressourcen mit Resource Hacker der *.dll hinzugefügt.
+ Bitmap
+ 123 + 0 (Neutral) Feldermeldung: Die Ressource 123 wurde nicht gefunden. |
Re: Ressource in einer DLL von außen aufrufen
LoadFromResourceID(, 123);
oder LoadFromResourceName(, MakeIntResource(123)); Gruß Hagen |
Re: Ressource in einer DLL von außen aufrufen
Hallo. Ich hab jetzt folgendes:
Delphi-Quellcode:
Jetzt erhalte ich eine Access Violation :(
procedure TForm1.Button1Click(Sender: TObject);
var Lib: Integer; begin Lib := LoadLibraryEx('Ressource.dll', 0, LOAD_LIBRARY_AS_DATAFILE); if Lib <> 0 then try Image1.Picture.Bitmap.LoadFromResourceName(Lib, MakeIntResource(222)); finally FreeLibrary(Lib); end else raise Exception.Create('Fehler in der Ressourcen-DLL...'); end; [edit=Daniel B]Delphi-Tags korrrigiert. Mfg, Daniel B[/edit] |
Re: Ressource in einer DLL von außen aufrufen
Ich habe genau das gleiche Problem:
Zitat:
Delphi-Quellcode:
Wenn ich allerdings mit dem Resource Hacker Bilder hinzufüge findet er sie nicht. Hab grade das Board durchsucht und bin auf viele verschiedene Möglichkeiten gestoßen wie man Bilder aus dlls öffnen kann aber keine hat mit dem ResHacker getan.
(mit r := TResourceStream.Create(dll, Name, 'BMP')
Wie funktioniert das mit der ID bzw. loadfromresourceNAME()? Wozu ist das MakeIntResource() und tut das nur mit Zahlen oder auch mit Namen? Mein Prog sieht im Moment genauso aus wie in Blackdrakes letztem Post nur das statt dem 222 eine stringvariable steht und liefert den fehler "Resource 'blabla' nicht gefunden". Ich hoffe jemand kann mir helfen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 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