![]() |
Delphi-Version: 2005
Bilder aus Dll einbinden?
Hallo, ich habe in der Codelibrary folgendes gefunden:
![]() Doch das ganze funktioniert von hinten bis vorne bei mir nicht. In dieser Zeile
Delphi-Quellcode:
kommt immer ein EResNotFound Fehler und ich weiß nicht wieso?
r := TResourceStream.Create(h, 'BILD1', 'Jpeg');
Könnt ihr mir helfen? Könnte meine .dll vllt fehlerhaft sein? Wie kann ich das prüfen? |
AW: Bilder aus Dll einbinden?
Ist h ein Handle zu deiner DLL?
Wie liegt das Bild in der DLL? (hoffentlich als Resource und die Resource ist auch erstellt und eingebunden) Du kannst ja einfach mal mit einem RecourcenEditor in die DLL reinschauen, ob's auch da drin ist. Eventuell auch statt "JPEG" es mal mit "RCDATA" versuchen. |
AW: Bilder aus Dll einbinden?
Bitte
![]() |
AW: Bilder aus Dll einbinden?
Vermutlich geht es so:
Delphi-Quellcode:
r := TResourceStream.Create(h, 'RCDATA', 'BILD1');
|
AW: Bilder aus Dll einbinden?
Laut Hilfe andersrum:
Zitat:
|
AW: Bilder aus Dll einbinden?
Zitat:
|
AW: Bilder aus Dll einbinden?
:glaskugel: putzen ist dann wohl angesagt :mrgreen:
|
AW: Bilder aus Dll einbinden?
Soo, jetzt auch nochmal ich
Delphi-Quellcode:
.
r := TResourceStream.Create(h, 'BILD1', RT_RCDATA);
[pseudoedit] ohhhhhh, jetzt hab'sch den DeddyH übersehn :lol: Nja, wie gesagt, versuch es mal mit RCDATA. "JPEG" ist nicht unbedingt eines der Standard-Resource-Formate, wie RCDATA/BMP/ICO/TEXT usw. |
AW: Bilder aus Dll einbinden?
Zitat:
|
AW: Bilder aus Dll einbinden?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich denke mal das es ein Handle ist, weiß es aber nicht genau. Die Dll sieht so aus:
Delphi-Quellcode:
und die Bilder.rc wie in dem Crosspost!
library Bilder;
{$R 'Bilder.res' 'Bilder.rc'} begin end. Leider kommt der selbe Fehler auch bei RCDATA :-/ Hab mal nen Screen vom Projektinspektor gemacht: ![]() ![]() Uploaded with ![]() |
AW: Bilder aus Dll einbinden?
Zitat:
sondern nach dem Wert, welcher in dieser Variable steckt. (dieser wird meistens über ![]() ![]() Es wäre nicht schlecht, wenn du mal die ganze Prozedur zeigen würdest, wo du das Bild auslesen willst (bzw. zumindestestens alle wichtigen Teile). |
AW: Bilder aus Dll einbinden?
Also das steht in meinem Projekt, wo ich die Bilder benutzen möchte:
Delphi-Quellcode:
procedure images();
var h :HINST; r :TResourceStream; j :TJpegImage; i :integer; begin h := LoadLibrary('Bilder.dll'); if h <> 0 then begin r := TResourceStream.Create(h, 'BILD1', RT_RCDATA); j := TJpegImage.Create; try j.LoadFromStream(r); Form1.Image1.Picture.Bitmap.Assign(j); finally j.Free; r.Free; end; FreeLibrary(h); end else RaiseLastOSError(); end; |
AW: Bilder aus Dll einbinden?
Zwei Punkte:
1. Gib mal einen absoluten Pfad zur DLL an. 2. Bau mal einen try-except-Block um LoadFromStream, damit du eine aussagekräftige Fehlermeldung bekommst. Hast du mal in die DLL reingeguckt, ob die Ressourcen wirklich drin sind? |
AW: Bilder aus Dll einbinden?
Hi,
bin noch nicht lange mit Delphi dabei, welche Exception soll ich dann genau abfangen? Für nen kleinen Codeschnippsel oder Link wäre ich sehr dankbar. Edit: Absoluter Pfad zur DLL bringt leider nichts. |
AW: Bilder aus Dll einbinden?
Keine spezielle. Du sollst einfach nur eine aussagekräftige Fehlermeldung bekommen.
Und hast du dir endlich mal die DLL mit einem Ressourceneditor angeguckt? |
AW: Bilder aus Dll einbinden?
Hi,
probier bitte mal das :
Delphi-Quellcode:
Greetz Data
// Form1.Image1.Picture.Bitmap.Assign(j);
Form1.Image1.Picture.Assign(j); |
AW: Bilder aus Dll einbinden?
Wo finde ich den Ressourceneditor?
Um loadfromstream ist ja schon ne try Klausel.. bis dahin komme ich aber gar nicht.. der Fehler beginnt ja beim TResourceStream... In der Delphi-Hilfe habe ich auch nichts zu einem RessourcenEditor gefunden.. kann es sein das ihr den hier meint: ![]() ? @DataCool Ich habs mal geändert, aber wie gesagt, bis dahin kommt das Programm leider gar nicht erst.. |
AW: Bilder aus Dll einbinden?
|
AW: Bilder aus Dll einbinden?
Liste der Anhänge anzeigen (Anzahl: 1)
Okay hab mal nen Except drum gebaut, aber wie gesagt, soweit kommt das Programm ja noch nicht..
Hab die DLL mir jetzt mit Resource Hacker angeschaut.. aber was ich da finden soll weiß ich auch nicht so recht... Bild im Anhang |
AW: Bilder aus Dll einbinden?
Zitat:
|
AW: Bilder aus Dll einbinden?
Nein.
Ich seh da so gut wie gar nichts sinnvolles in der Datei... Ich habe die DLL aber exakt nach Anleitung erstellt.. hier meine vorgehensweise: Datei - Neu - "DLL-Experte" Diese habe ich in einem Verzeichnis ("Bilder") gespeichert. In diesem Ordner befinden sich meine Bilder mit den Namen: h3.jpg h5.jpg hk.jpg Weiterhin ist in dieser eine Bilder.rc Datei, welche folgenden Inhalt besitzt: BILD1 JPEG "h3.jpg" BILD2 JPEG "h5.jpg" BILD3 JPEG "hk.jpg" Nun bin ich in Delphi auf Projektverwaltung und habe dort unter Bilder.dll rechtsklick, hinzufügen gemacht und die Bilder.rc Datei ausgewählt. Dann hat Delphi automatisch den Code angepasst zu:
Delphi-Quellcode:
Dann habe ich das Projekt erstellt mit Strg+F9.. Die DLL wurde erzeugt und diese habe ich dann in das Verzeichnis meines eigentlichen Projekts kopiert.
library Bilder;
{$R 'Bilder.res' 'Bilder.rc'} uses SysUtils, Classes; begin end. Ist das falsch gewesen? |
AW: Bilder aus Dll einbinden?
Delphi 2005 kompiliert die RC-Dateien nicht automatisch (glaub ich).
Das müßtest du also selber machen. |
AW: Bilder aus Dll einbinden?
Und ob STRG-F9 da reicht, weiß ich nicht so genau, hast Du es mal mit SHIFT-F9 probiert?
|
AW: Bilder aus Dll einbinden?
Ich benutze Delphi 7... habe bei der Bilder.rc jetzt mal Bilder erzeugen gemacht.. hat sich aber nichts geändert.. die Dll hab ich erneut erzeugt, aber auch diesmal findet er die Ressource nicht...
Shift-F9 bringt gar nichts.. oO was soll denn da passieren? |
AW: Bilder aus Dll einbinden?
Um aus der *.rc eine *.res zu machen, brauchst Du IIRC die brcc32.exe. Das ist ein Kommandozeilenprogramm, das im Normalfall mit Delphi installiert wird (müsste also im Delphi-bin-Verzeichnis liegen).
|
AW: Bilder aus Dll einbinden?
Zitat:
Zitat:
|
AW: Bilder aus Dll einbinden?
So, das sieht jetzt alles schon ein bisschen besser aus!
Habe jetzt die .rc mit brcc32 in eine *.res umgewandelt! Diese Datei ist jetzt ca so groß wie die Bilder zusammen.. dürfte also stimmen.. dann habe ich das ganze erneut mit Delphi in eine dll umgewandelt.. diese ist sogar noch ein bisschen größer.. (149Kb) Mit dem Resourcenhacker habe ich in die DLL geschaut und nun gibts da auch nen Ordner JPEG mit BILD1, BILD2 und BILD3, allerdings sehe ich keine Bilder, sondern lediglich Hexadezimalcode (sollte auch richtig sein denke ich :D) Aber trotz allem findet er noch immer keine Ressource Bild1 So Leute, das wars!!! Hab die Zeile zu:
Delphi-Quellcode:
geändert und das Bild wird eingefügt!
r := TResourceStream.Create(h, 'BILD1', 'JPEG');
Für alle die in Zukunft nochmal auf dieses Thema stoßen, hier der komplette Quelltext:
Delphi-Quellcode:
procedure images();
var h :HINST; r :TResourceStream; j :TJpegImage; begin h := LoadLibrary('F:\Programme\Borland\Delphi7\Projects\Poker\bilder.dll'); if h <> 0 then begin r := TResourceStream.Create(h, 'BILD1', 'JPEG'); j := TJpegImage.Create; try j.LoadFromStream(r); Form1.Image1.Picture.Assign(j); finally j.Free; r.Free; end; FreeLibrary(h); end else RaiseLastOSError(); end; |
AW: Bilder aus Dll einbinden?
OK, im Ausgangspost steht halt was von Delphi 2005.
(der Admin muß das endlich mal ändern) PS: Trag doch einfach mal deine Delphi-Version in dein DP-Profil ein. Gut, Delphi 7 kompiliert erst rechte keine RC-Dateien von sich aus. Du mußt also erstmal aus der RC eine RES erstellen (siehe Post #25), welche du dann in deine DLL einbinden kannst. |
AW: Bilder aus Dll einbinden?
Jup, das war auch der Fehler, dankeschön!
|
AW: Bilder aus Dll einbinden?
Sorry für den Doppelpost, aber ich hätte da noch eine Frage:
Kann ich die Bilder auch am Anfang einmal einlesen und dann die ganze Zeit nutzen? Geht das irgendwie? Mit diesem Handle und Stream siehts recht komplex aus.. geht das? |
AW: Bilder aus Dll einbinden?
TJPEGImage(s) über Create erzeugen und in diese(s) einlesen. Die können dann per Assign (z.B.) dahin zugewiesen werden, wo sie gebraucht werden. Nur nicht vergessen, bei Ende des Programms (MainForm.Destroy) alle wieder freizugeben.
|
AW: Bilder aus Dll einbinden?
Das heißt aber, dass ich bei 72 Bilder auch 72 globale Variablen definieren muss? Das ist ja nicht sehr effektiv, da versuch ich mir was anderes auszudenken!
|
AW: Bilder aus Dll einbinden?
Nimm ein Array.
|
AW: Bilder aus Dll einbinden?
Array of TJpegImage müsste doch gehen?
Allerdings müsste man dann immer wissen, an welcher Position welches Bild ist ;-) Aber wenn man in der rc-Datei die Bilder nach Nummerierung benennt (BILD00, BILD01...BILD71) könnte man das auf einen Ritt in einer For-Schleife einlesen, da die Bildnamen mit Hilfe der Laufvariablen erzeugt werden können. Und aus dem Namen ergäbe sich auch die Positon im Array (zur Orientierung). |
AW: Bilder aus Dll einbinden?
Du könntest die ResourceStreams auch schon alle erstellen, soviel Speicher brauchen diese Streams selber garnicht und brauchst dann nur noch jedesmal ein Position=0 und ein LoadFromStream zu machen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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