AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TImage Bild laden über DLL

Ein Thema von Luki206 · begonnen am 29. Mai 2014 · letzter Beitrag vom 8. Jun 2014
Antwort Antwort
Luki206
(Gast)

n/a Beiträge
 
#1

TImage Bild laden über DLL

  Alt 29. Mai 2014, 14:01
Hi DP, ich habe ein Problem/Frage, ich habe jetzt etwas versucht ein Bild aus einer DLL über eine DLL zu laden sprich ich habe den Code in der DLL:
Delphi-Quellcode:
procedure GetImage(Image: TImage; place: Integer; SLibrary: String); stdcall;
var
myStream: TResourceStream;
h: Cardinal;
LGraphic: TGraphic;
begin
 h:= LoadLibrary(PChar(SLibrary));
 mystream := TResourceStream.CreateFromID(h, place, RT_RCDATA);
 LGraphic := TPngImage.Create;
  try
    LGraphic.LoadFromStream(mystream);
    Image.Picture.Assign(LGraphic);
  finally
    mystream.Free;
    LGraphic.Free;
  end;
 FreeLibrary(h);
end;
Und rufe ihn so auf (DLL wird zum Ladezeit punkt eingebunden):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 GetImage(ImgTest, 1, 'Test.dll');
end;
Das Bild ist ein PNG Bild.

Und jetzt meine Frage, ich bekomme beim Starten folgenden Fehler:
Code:
Im Projekt Test.exe ist eine Exception der Klasse EConvertError mit der Meldung 'TPngImage kann nicht zu TPicture zugewiesen werden' aufgetreten.
Danke Luki
  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: TImage Bild laden über DLL

  Alt 29. Mai 2014, 14:18
Wenn du die DLL nicht als Package umbaust (als gemeinsame Runtimepackages) geht das nicht.

Jede DLL hat eine eigene "Implementierung" allen Klassen "on Board" so das Exe.TObject <> Dll.TObject (und auch für alle anderen Klassen) gilt.

Was willst du eigentlich erreichen wenn du die Funktionalität in eine DLL verlagerst?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: TImage Bild laden über DLL

  Alt 29. Mai 2014, 14:21
Du weist direkt zu. Du musst über die Bitmap-Eigenschaft gehen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: TImage Bild laden über DLL

  Alt 29. Mai 2014, 14:23
Und jetzt meine Frage, ich bekomme beim Starten folgenden Fehler:
Code:
Im Projekt Test.exe ist eine Exception der Klasse EConvertError mit der Meldung 'TPngImage kann nicht zu TPicture zugewiesen werden' aufgetreten.
Ich sehe da keine Frage, sondern lediglich eine Fehlermeldung, die besagt, daß du ein TPngImage-Objekt nicht einem TPicture-Objekt zuweisen kannst.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TImage Bild laden über DLL

  Alt 29. Mai 2014, 14:24
Ich sehe da keine Frage, sondern lediglich eine Fehlermeldung, die besagt, daß du ein TPngImage-Objekt nicht einem TPicture-Objekt zuweisen kannst.
Jupp, das außerdem.
TPngImage ist ein TGraphic und TImage ist das nicht. (TImage kapselt nur ein TPicture, wo ein TGraphic drin ist)


sprich ich habe den Code in der DLL
Und dann wunderst du dich, daß es nicht funktioniert?

Objekte, Strings, dynamische Arrays usw. DARF man nicht über DLL-Genzen hinweg verwenden.

Stichwort: Memory und RTTI

Da hat jede DLL/EXE ihre eigenen Speichermanager und auch eine eigene RTTI, womit das nicht kompatibel zueinander ist.
Außer man verbindet diese Dinge: z.B. den Speicher via SharedMemory (gibt es mehrere Wege dafür) oder die RTTI über Packages (BPL).

Und dann gibt es auch noch globale und gemeinsam genutzt Objekte, die du hier gemeinsam nutzen illst, obwohl sie eben nicht gemeinsam für DLL/EXE genutzt werden können.


Zitat:
Und jetzt meine Frage, ich bekomme beim Starten folgenden Fehler:
PS: Es gibt einen Unterschied zwischen Compilieren und dem Starten des Programms.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Mai 2014 um 14:35 Uhr)
  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: TImage Bild laden über DLL

  Alt 29. Mai 2014, 14:47
[QUOTE=himitsu;1260678]
Ich sehe da keine Frage, sondern lediglich eine Fehlermeldung, die besagt, daß du ein TPngImage-Objekt nicht einem TPicture-Objekt zuweisen kannst.
Jupp, das außerdem.
TPngImage ist ein TGraphic und TImage ist das nicht. (TImage kapselt nur ein TPicture, wo ein TGraphic drin ist)

Und wie schaut der Quellcode aus? Image.Picture.Assign(LGraphic)? Also wir ja dem Picture-Object das PNG zugewiesen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TImage Bild laden über DLL

  Alt 29. Mai 2014, 15:43
Und wie schaut der Quellcode aus? Image.Picture.Assign(LGraphic)? Also wir ja dem Picture-Object das PNG zugewiesen.
GetImage(ImgTest, 1, 'Test.dll'); Ich möchte fast wetten, daß ImgTest das PNGImage ist.


Wenn der GetImage-Code in die EXE rein kommt, dann kann er dort auch problemlos verwendet werden.
Und wenn man entweder den passenden Typ übergbit, anstatt des ImgTest,
oder wenn man den Parametertyp entpsrechend anpasst, dann ist das Problem auch weg.


Und den Resourcenschutzblock sollte man auch reparieren, denn wenn es beim Laden der Resource oder beim Laden des Bildes knallt, dann wird die DLL nicht mehr freigegeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Mai 2014 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#8

AW: TImage Bild laden über DLL

  Alt 8. Jun 2014, 16:15
Sorry das ich mich erst jetzt melde... Wie dämlich bin ich denn Wem es nicht aufgefallen ist, ich habe die Frage schon einmal in einer anderen Form gefragt.. Ich entschuldige mich dafür noch einmal...
  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 21:53 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