AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Problem beim Umgang mit DLL's
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Umgang mit DLL's

Ein Thema von Hannes91 · begonnen am 28. Aug 2010 · letzter Beitrag vom 28. Aug 2010
Antwort Antwort
Benutzerbild von Hannes91
Hannes91

Registriert seit: 28. Aug 2010
Ort: Hamburg
15 Beiträge
 
Delphi 2010 Professional
 
#1

Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 13:18
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.
Hannes
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 13:52
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Hannes91
Hannes91

Registriert seit: 28. Aug 2010
Ort: Hamburg
15 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 14:09
Zunächst habe ich eine .rc-Datei mit folgendem Inhalt erstellt:
Code:
Bild1 PNG "Background.png"
Bild2 BMP "Grid.bmp"
Mit dieser und brcc32.exe habe ich dann eine .res-Datei erstellt.

Folgenden Code habe ich zur DLL-Erzeugung benutzt:
Delphi-Quellcode:
library Ressource;

uses
  SysUtils,
  Classes;

{$R 'Ressource.res' 'Ressource.rc'}

begin
end.
Nun habe ich es im Hauptprogramm geschafft (mit Hilfe ), das zweite Bild (also die BMP-Grafik) dynamisch einzubinden:
Delphi-Quellcode:
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;
Jetzt suche ich halt einen Weg, auch die verbleibende PNG-Datei (dynamisch) einzubinden.
Ich hoffe, ich konnte zum Verständnis des Problems etwas beitragen.
Hannes
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 14:18
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Hannes91
Hannes91

Registriert seit: 28. Aug 2010
Ort: Hamburg
15 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 14:38
Delphi-Quellcode:
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;
Und wieso enthält TPNGImage kein Handle??? Immerhin kennt er TPNGImage überhaupt!
Kann ich dann trotzdem LoadBitmap(dllHandle, 'Bild1') verwenden, wenn es sich um ein PNG handelt?
Hannes
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 14:38
Die PNG's müssen als RCData gespeichert werden. Siehe z.B. hier
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Hannes91
Hannes91

Registriert seit: 28. Aug 2010
Ort: Hamburg
15 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 15:04
Danke Bernhard, genau, was ich gesucht habe.

Tausend Dank euch allen, es funktioniert nun einwandfrei.

Hannes
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 16:40
Du kannst übrigens alles Units aus der uses-Klausel der DLL rausnehmen, du hast ja keinen Code, der diese benötigt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#9

AW: Problem beim Umgang mit DLL's

  Alt 28. Aug 2010, 16:46
Du kannst übrigens alles Units aus der uses-Klausel der DLL rausnehmen, du hast ja keinen Code, der diese benötigt.
Man kann solche DLLs auch direkt als Resource-DLL laden.
LoadLibraryEx + LOAD_LIBRARY_AS_DATAFILE
Dann wird auch nich Initialisierungscode der DLL ausgeführt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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