![]() |
Bitmap in DLL bearbeiten, dann zurück zu Hauptprogramm?
Hallo zusammen,
ich schreibe an einem Programm, welches DLLs als Plugins verwendet. Einfach erklärt soll folgendes passieren: Im Hauptprogramm befindet sich auf dem Formular ein TImage. Bei bestimmten Ereignissen soll das Bitmap des Images an eine DLL übergeben werden. Die DLL verändert das Bitmap, indem sie z.B. Text im Canvas ausgibt, fertig. Ich habe nun folgendes Problem. Das funktioniert alles schön, nur gibt es beim Beenden des Hauptprogramms ein Exception. Ich vermute mal, es liegt an der Speicherverwaltung, bzw. daran, daß ich in der DLL auf VCL-Komponente des Hauptprogramms zugreife. Mit ShareMem habe ich es auch schon versucht, nur dann bekomme ich bereits beim Programmablauf ein Exception. Um erst mal das Programm weiter zu entwickeln, mache ich ein Workaround:
Ich nutze also anstelle des Arbeitsspeichers den Festplattenspeicher zur Datenübergabe, was natürlich nicht sehr elegant ist. Ich habe dann noch versucht die Bitmapdaten über TMemoryStream zu übergeben, da tut sich nur nichts.
Delphi-Quellcode:
Also im obigen Fall tut sich nichts. Gehe ich über SaveToFile/LoadFromFile funktioniert es.
type
TPluginRecord = packed record MemoryStream: TMemoryStream; PluginSend : procedure(Befehl : PChar; Parameter : Pointer); // Callback end; Bitmap.SaveToStream(TPluginRecord(Parameter^).MemoryStream); // in der DLL, innerhalb einer procedure, Parameter ist das Record procedure PluginCallback(Befehl : PChar; Parameter : Pointer); // im Hauptprogramm begin Form1.Image1.Picture.Bitmap.LoadFromStream(MemStream); Form1.Image1.Repaint; end; Ich hoffe, ich konnte euch mein Problemchen ausreichend erklären, bin nämlich eher Delphi-Beginner, sieht man ja auch an der Anzahl meiner Beiträge :wink: Vielleicht kann mir hier ja jemand mal Tipps geben, schon mal Danke im voraus! Gruß Dirk |
Re: Bitmap in DLL bearbeiten, dann zurück zu Hauptprogramm?
Keine ahnung wo dein Problem ist
Aber versuchs mal mit FASTMM4 ! :gruebel: Das ding Protokolliert Speicherlecks sehr gut! ![]() Gruß Jörg |
Re: Bitmap in DLL bearbeiten, dann zurück zu Hauptprogramm?
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei mal ein kleines Beispiel. :)
Übergeben wird das Handel (HDC) der Canvas-Variable der Instanz der TImage-Klasse. |
Re: Bitmap in DLL bearbeiten, dann zurück zu Hauptprogramm?
Zitat:
das ist genau die Info, die ich gesucht habe ... probiere ich gleich mal aus, Danke! :thumb: EDIT: So, ich habe es mal getestet, funktioniert sehr gut! Auf Canvas male ich in der DLL folgendermaßen (Beispiel):
Delphi-Quellcode:
Gruß
procedure DrawToCanvas(ADC: HDC);
var LCanvas: TCanvas; i: integer; begin LCanvas := TCanvas.Create; LCanvas.Handle := ADC; LCanvas.Font.Name := 'Arial Black'; LCanvas.Font.Size := 12; i := LCanvas.TextWidth('TestText'); LCanvas.TextOut((320-i) div 2, 10, 'TestText'); // Zentrieren, Breite = 320 LCanvas.Handle := 0; LCanvas.Free; end; Dirk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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