Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Resourcen DLL's (https://www.delphipraxis.net/179126-resourcen-dlls.html)

Luki206 16. Feb 2014 10:28

Resourcen DLL's
 
Hi,
ich habe mir das Tutorial von Darty durchgelesen wie man Ressourcen DLL's erstellt (Tutorial von Darty) nur verstehe ich nicht 1.) wo ich die Bilder die ich in die .rc Datei geschrieben habe auch einfügen soll. In den Ordner der DLL? Irgendwo auf meinem Rechner? Oder auch die .rc wo gehört diese hin? 2.) wie würde ich das dann mit PNG Bildern machen?
Danke
Luki :)

Sir Rufo 16. Feb 2014 10:38

AW: Resourcen DLL's
 
Überleg doch mal selber...

Wenn das in der .rc Datei steht
Code:
BILD1 JPEG "Borland.jpg"
BILD2 JPEG "Delphi.jpg"
BILD3 JPEG "Foto.jpg"
dann soll der Ressource-Compiler das ja in eine .res Datei übersetzen.
Wie weiß der Ressource-Compiler jetzt, wie er diese Dateien finden soll?
(Kleiner Tip: Zaubern kann der nicht) ;)

Luki206 16. Feb 2014 10:48

AW: Resourcen DLL's
 
Ich denke niemand kann zaubern ;) :D Nur versteht man unter Ressourcen-Compiler der Compiler der die DLL erstellt oder gibt es da noch etwas anderes das so etwas erstellt?

Sir Rufo 16. Feb 2014 10:52

AW: Resourcen DLL's
 
Zitat:

Zitat von Luki206 (Beitrag 1248044)
Ich denke niemand kann zaubern ;) :D Nur versteht man unter Ressourcen-Compiler der Compiler der die DLL erstellt oder gibt es da noch etwas anderes das so etwas erstellt?

http://de.wikipedia.org/wiki/Ressource_(Software)

Luki206 16. Feb 2014 12:16

AW: Resourcen DLL's
 
Danke hat mich jetzt schon ein Stück weiter gebracht. Ich habe nämlich bei Google einen Link zu Embarcadero Wiki (Weiß nicht genau wie das heißt ;) ) wo erklärt wird wo man den Ressourcen-Compiler finden kann. Nur möchte ich jetzt Delphi oder meine Testanwendung kaputt machen in dem ich in 'Projekt -> Optionen -> Ressourcen-Compiler' dort irgendwas um stelle da ich nichts gefunden habe wie ich die .rc Datei mit einbinde.. Ich glaube ich stelle mich dappischer an als das die Sache schwer ist oder?

Sir Rufo 16. Feb 2014 12:33

AW: Resourcen DLL's
 
Hast du den Menüpunkt "Projekt\Ressourcen und Bilder..." nicht?
Da kannst du dir die Ressourcen zusammenklicken ;)

Luki206 16. Feb 2014 12:39

AW: Resourcen DLL's
 
Doch habe ich. Und in meinem neuen DLL Projekt dort dann einfügen? Wenn es wirklich so einfach war ist doch dann irgendwas falsch (Matheunterricht lehrt uns das immer wieder :D)?

Sir Rufo 16. Feb 2014 12:46

AW: Resourcen DLL's
 
Zitat:

Zitat von Luki206 (Beitrag 1248058)
Doch habe ich. Und in meinem neuen DLL Projekt dort dann einfügen? Wenn es wirklich so einfach war ist doch dann irgendwas falsch (Matheunterricht lehrt uns das immer wieder :D)?

Was soll denn jetzt falsch sein? :gruebel:
Und warum soll es auch kompliziert sein? :gruebel:

Luki206 16. Feb 2014 12:50

AW: Resourcen DLL's
 
Keine Ahnung.. Nur weil dort bei dem Tutorial diese Text Datei erstellt werden muss und.. und.. und.. Deshalb habe ich gemeint das durch die Leichtigkeit dieses Vorgehens irgendwo dann ein Fehler sein muss, wie ich ja gemeint hatte mit dem Mathe Unterricht. Ist die Aufgabe zu einfach ist sie falsch ;)
Edit: Eine Frage habe ich jetzt noch, ich habe png Bilder und keine JPEG Bilder. Wie mache ich das da jetzt? Bei Uses PngImage einfügen und dann das nur mit PNG schreiben anstatt mit JPEG?

Sir Rufo 16. Feb 2014 12:55

AW: Resourcen DLL's
 
Zitat:

Zitat von Luki206 (Beitrag 1248060)
Keine Ahnung.. Nur weil dort bei dem Tutorial diese Text Datei erstellt werden muss und.. und.. und.. Deshalb habe ich gemeint das durch die Leichtigkeit dieses Vorgehens irgendwo dann ein Fehler sein muss, wie ich ja gemeint hatte mit dem Mathe Unterricht. Ist die Aufgabe zu einfach ist sie falsch ;)

Meistens habe ich festgestellt, dass die Leutchen immer zu kompliziert denken.

Wenn du neugierig bist, dann trage dort ein paar Ressourcen ein (wild verstreut von der Platte) und erzeuge das Projekt.
Dann schaust du mal in deinen Projektordner und wirfst ein Blick auf die dort liegenden Dateien.
Wenn dort eine Datei deine Aufmerksamkeit erregt, dann schau dir diese Datei doch einfach mal an, was dort drin steht.
(Zur Info: Diese Datei wird immer erst beim Kompilieren des Projekts geschrieben)

Luki206 16. Feb 2014 13:25

AW: Resourcen DLL's
 
Ja kann ich machen ;) nur wie geht das jetzt mit den PNG's? Weil ich habe eben mich irgendwo reingelesen und habe auch schon probiert aber es geht nicht.. :( BZW. Ich bekomme Fehler zurück (bei dem Code der anderen)

mkinzler 16. Feb 2014 13:30

AW: Resourcen DLL's
 
Und würdest Du Dich nun Geheimnisverrat schuldig machen, wenn Du uns den Fehler nennen würdest?

Luki206 16. Feb 2014 13:34

AW: Resourcen DLL's
 
Nein, tut mir leid.. Ich hätte ihn auch genannt nur wurde ich eben abgelenkt und habe das vergessen, sorry.. Ich habe den Code aber erstmal mit Bitmaps probiert und hier ist der Code:
Delphi-Quellcode:
procedure TFrmHaupt.PictLoad(Pic: string);
var
   h :HINST;
   r :TResourceStream;
   b : Tbitmap;
begin
   h := LoadLibrary('bitmaps.dll');
   if h <> 0 then
   try
     r := TResourceStream.Create(h, Pic, BITMAP);
     b := Tbitmap.Create;
     try
       b.LoadFromStream(r);
       ImgButtonStore.Picture.Bitmap := b;
     finally
       b.Free;
       r.Free;
     end;
   finally
     FreeLibrary(h);
   end;
end;
und hier der Fehler:
Code:
[dcc32 Fehler] haupt.pas(155): E2029 '(' erwartet, aber ')' gefunden
[dcc32 Fehler] haupt.pas(156): E2010 Inkompatible Typen: 'PWideChar' und 'tagBITMAP'

Sir Rufo 16. Feb 2014 13:45

AW: Resourcen DLL's
 
Delphi-Referenz durchsuchenTResourceStream.Create

Luki206 16. Feb 2014 13:54

AW: Resourcen DLL's
 
Ok, ich habe jetzt meinen Code verbessert aber jetzt bekomme ich angezeigt das die Bitmap ungültig sei. Neuer Code:
Delphi-Quellcode:
procedure TFrmHaupt.PictLoad(Pic: string);
var
   h :HINST;
   r :TResourceStream;
   b : Tbitmap;
begin
   h := LoadLibrary('LW_MP_GRA1.dll');
   if h <> 0 then
   try
     r := TResourceStream.Create(h, Pic, RT_BITMAP);
     b := Tbitmap.Create;
     try
       b.LoadFromStream(r);
       ImgButtonStore.Picture.Bitmap := b;
     finally
       b.Free;
       r.Free;
     end;
   finally
     FreeLibrary(h);
   end;
end;

Sir Rufo 16. Feb 2014 14:00

AW: Resourcen DLL's
 
Zeig uns doch mal die dazugehörige .rc Datei

Luki206 16. Feb 2014 14:03

AW: Resourcen DLL's
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe sie in .txt gemacht weil sonst hätte ich sie ja nicht hochladen können

Sir Rufo 16. Feb 2014 14:34

AW: Resourcen DLL's
 
So hätte es auch gereicht, gelle?
Code:
Bitmap_1 BITMAP "..\\..\\..\\..\\Pictures\\L-Write\\Media Player Store Button.bmp"
Bitmap_2 BITMAP "..\\..\\..\\..\\Pictures\\L-Write\\Media Player Store Button_hint.bmp"

Luki206 16. Feb 2014 14:37

AW: Resourcen DLL's
 
Ja, heut ist nicht mein Tag :D

himitsu 16. Feb 2014 14:40

AW: Resourcen DLL's
 
Delphi-Referenz durchsuchenTBitmap.LoadFromResourceName

War es nicht so, daß bei den Bitmap-Resourcen irgendwas mit einem "fehlenden" FileHeader war?
Bei LoadFromStream muß aber die komplette "Datei" vorhanden sein.



PS: LoadLibraryEx + LOAD_LIBRARY_AS_IMAGE_RESOURCE .... läd die DLL, ohne die Initialisationsroutine auszuführen.

Luki206 16. Feb 2014 15:25

AW: Resourcen DLL's
 
Ich verstehe nicht was du damit meins? :gruebel:

himitsu 16. Feb 2014 15:51

AW: Resourcen DLL's
 
Wenn man nichtmal das einzige Wort der ersten Zeile lesen kann, dann kann ich auch nicht weiterhelfen.

Luki206 16. Feb 2014 16:02

AW: Resourcen DLL's
 
Oh, sorry. Ich habe das PS gemeint. Das ist irgendwie verwirrend..

himitsu 16. Feb 2014 16:33

AW: Resourcen DLL's
 
Wenn eine DLL geladen wird, dann wird die DLL nicht nur in den RAM gelasen, sondern auch die Initialisierungfunktion ausgeführt,
worin auch die Initialization-Abschnitte aller Units und der Code in der DPR ausgeführt wird.
Das Selbe dann auch beim Entladen der DLL.

Man kann aber beim Laden von DLLs auch sagen, daß man nur Daten/Resourcen verwenden möchte und daher kein Code ausgeführt werden soll.
Wenn man eh keine exportieren Funktionen aufrufen will, dann ist die Initialisierung eh nicht nötig.

Luki206 16. Feb 2014 16:55

AW: Resourcen DLL's
 
Ah ok verstanden ;) aber das ist nicht das Hauptproblem, oder?

himitsu 16. Feb 2014 17:09

AW: Resourcen DLL's
 
Drum stand es ja auch nur als Zusatz unten drunter. :angel2:

Luki206 17. Feb 2014 17:22

AW: Resourcen DLL's
 
Ok, ich bin jetzt soweit dass ich wenigstens die Recourcen in meiner Anwendung habe, das mit der DLL weiß ich immer noch nicht wie ich das da machen soll, bzw. wie ich auf die DLL zugreife. Ich werde es aber gleich mal versuchen mit dem Code von vorne. Danke bis jetzt ;)

Luki206 25. Feb 2014 17:22

AW: Resourcen DLL's
 
So ich melde mich noch einmal hier. Ich habe jetzt auch herausgefunden wie man *.rc in *.res umwandelt. Nur wenn ich jetzt die cmd.exe aufrufe und dann
Code:
brc32.exe "D:\LWRe\bild.rc
eingebe, bekomme ich folgenden Fehler:
Code:
Error bild.rc 1 14: Invalid bitmap format
und folgendes steht in meiner .rc Datei:
Code:
bild1 BITMAP "D:\LWRe\Play.bmp"
bild2 BITMAP "D:\LWRe\pause.bmp"
Wo ist mein Denkfehler? :gruebel:

Edit: Alle zwei Dateien sind Bitmapfiles..

Edit2: Hat sich erledigt, läuft jetzt über DLL aber auch über .png nur bekomme ich jetzt beim Ausführen folgenden Fehler:
Code:
Im Projekt Test.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'Access Violation at 0x0073ac34: read of address 0x00000000' aufegtreten.
Nur kann ich leider nichts mit dem Fehler anfangen.. :(

michaelthuma 25. Feb 2014 19:57

AW: Resourcen DLL's
 
Wo passiert der Fehler. Hier?

Delphi-Quellcode:
  ImgButtonStore.Picture.Bitmap := b;
Zitat:

Zitat von Luki206 (Beitrag 1248244)
Ok, ich bin jetzt soweit dass ich wenigstens die Recourcen in meiner Anwendung habe, das mit der DLL weiß ich immer noch nicht wie ich das da machen soll, bzw. wie ich auf die DLL zugreife. Ich werde es aber gleich mal versuchen mit dem Code von vorne. Danke bis jetzt ;)


Luki206 25. Feb 2014 19:59

AW: Resourcen DLL's
 
Oh, sorry hatte ich vergessen hier hin zu schreiben. In meinem anderen Thread mit den PNG aus Strean in TImage einfügen beantwortet ;)


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