![]() |
Problem beim Umgang mit DLL's
Moin,
ich bin gerade dabei, eine Tetris-Version zu programmieren. Um das Spiel realistischer aussehen zu lassen, möchte ich dabei z.T. PNG-Grafiken verwenden (insbesondere als transparenten Hintergrund). Angesichts der Dateigröße beim Laden zur Design-Zeit habe ich versucht, die Grafiken in eine DLL auszulagern. Die BMP-Grafiken bekomme ich auch wieder dynamisch ins Programm zurück (also in TImage), jedoch die PNG-Grafiken nicht. :( Kann mir jemand helfen, wie ich die PNG's nun in ein TImage lesen kann? Vielen Dank schon mal für eure Mühe. |
AW: Problem beim Umgang mit DLL's
Ein bischen Quellcode wäre schon schön bzw. Hinweis darauf was du bisher machst wäre schon gut.
Ansonsten können wir wieder eine mundere Raterunde beginnen. Stichwort für eine Alternative wären Ressourcen-DLL's. |
AW: Problem beim Umgang mit DLL's
Zunächst habe ich eine .rc-Datei mit folgendem Inhalt erstellt:
Code:
Mit dieser und brcc32.exe habe ich dann eine .res-Datei erstellt.
Bild1 PNG "Background.png"
Bild2 BMP "Grid.bmp" Folgenden Code habe ich zur DLL-Erzeugung benutzt:
Delphi-Quellcode:
Nun habe ich es im Hauptprogramm geschafft (mit Hilfe :wink:), das zweite Bild (also die BMP-Grafik) dynamisch einzubinden:
library Ressource;
uses SysUtils, Classes; {$R 'Ressource.res' 'Ressource.rc'} begin end.
Delphi-Quellcode:
Jetzt suche ich halt einen Weg, auch die verbleibende PNG-Datei (dynamisch) einzubinden.
var
dllHandle: THandle; thisBitmap: TBitmap; begin dllHandle := LoadLibrary('Ressource.dll' ); if dllHandle <> 0 then try thisBitmap := TBitmap.Create; try thisBitmap.Handle := LoadBitmap(dllHandle, 'Bild2' ); if thisBitmap.Handle <> 0 then IGrid.Picture.Bitmap.Assign(thisBitmap); finally thisBitmap.Free; end; finally FreeLibrary( dllHandle ); end; end; Ich hoffe, ich konnte zum Verständnis des Problems etwas beitragen. |
AW: Problem beim Umgang mit DLL's
Warum machst du es mit den PNGs nicht genauso oder warum geht es bei dir nicht?
Natürlich mit TPngImage oder wie das heißt. |
AW: Problem beim Umgang mit DLL's
Delphi-Quellcode:
Und wieso enthält TPNGImage kein Handle??? Immerhin kennt er TPNGImage überhaupt! :thumb:
var
dllHandle: THandle; thisBitmap: TBitmap; thisPNG : TPNGImage; begin dllHandle := LoadLibrary('Ressource.dll' ); if dllHandle <> 0 then try thisBitmap := TBitmap.Create; thisPNG := TPNGImage.Create; try thisBitmap.Handle := LoadBitmap(dllHandle, 'Bild2' ); thisPNG.Handle := //Er meckert mich an, dass TPNGImage kein Element namens Handle enthält if thisBitmap.Handle <> 0 then IGrid.Picture.Bitmap.Assign(thisBitmap); if thisPNG.Handle <> 0 then IHintergrund.Picture.Bitmap.Assign(thisPNG); finally thisBitmap.Free; end; finally FreeLibrary( dllHandle ); end; end; Kann ich dann trotzdem
Delphi-Quellcode:
verwenden, wenn es sich um ein PNG handelt?
LoadBitmap(dllHandle, 'Bild1')
|
AW: Problem beim Umgang mit DLL's
Die PNG's müssen als RCData gespeichert werden. Siehe z.B.
![]() |
AW: Problem beim Umgang mit DLL's
Danke Bernhard, genau, was ich gesucht habe.
Tausend Dank euch allen, es funktioniert nun einwandfrei. :cheers: |
AW: Problem beim Umgang mit DLL's
Du kannst übrigens alles Units aus der uses-Klausel der DLL rausnehmen, du hast ja keinen Code, der diese benötigt.
|
AW: Problem beim Umgang mit DLL's
Zitat:
LoadLibraryEx + LOAD_LIBRARY_AS_DATAFILE Dann wird auch nich Initialisierungscode der DLL ausgeführt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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