![]() |
PlugIn Schnittstelle - DLL
Hallo,
Zuerst muss ich mich entschuldigen, ich habe hier ein Problem mit Dlls und mit denen arbeite ich nur sehr selten und deshalb ist mein Wissen derer als sehr begrenzt einzustufen. Also, Wie sooft wenn ich etwas realisieren will, dass (zumindest für mich) mehr oder weniger neue "Technologien" erfordert baue ich es erstmal "im Reinen" in ein Testapp um dort das Potential austesten zu können. Deshalb ist mein Testapp auch teilweise mit Fragmenten bestückt die ich zum Testen benutzt habe und für das eigentliche Ziel unerheblich sind, das ganze hat etwas von einer Baustelle ;). Zum Problem: Ich habe hier eine Dll und ein Programm die Daten austauschen sollen(Die Dll soll einen Loader für spezifische Daten darstellen, welche immer erweitert werden(deshalb die Dll)). Die Dll "registriert" sich im Programm mit einem eigenen Typus("PlugIn") über den die Funktionen gesteuert werden. Soweit, so gut, alles funktioniert, ich kann auch (testweise) Strings austauschen. Jedoch erfordert das Ziel den Austausch binärer Daten(in diesem Fall die Daten eines TBitmaps), und das will einach nicht funktionieren. Beide Funktionen funktionieren(angepasst auf Strings) anstandslos. Es hat den anschein als würden einfach keine Daten ankommen. Hier sind mal die Funktion und der Aufruf: Aufruf:
Delphi-Quellcode:
Funktion:
procedure TForm1.Button1Click(Sender: TObject);
begin if opendialog1.Execute then begin Image1.Picture.Bitmap.Assign( FPlugIns[0].PlugIn.Loadmage(Opendialog1.Filename)); showmessage(IntToStr(Image1.Picture.Bitmap.Height)); //<-- Ergibt "0"! end; end;
Delphi-Quellcode:
function TPlugIn01.Loadmage(Filename: String): TBitmap;
var Bit: TBitmap; begin Bit := TBitmap.Create; try Bit.LoadFromFile(Filename); Result :=Bit; MessageBox(Parent, PChar(IntToStr(Bit.Width)), '', 0); finally Bit.Free; end; end; Ich bedanke mich schonmal hier für die Aufmerksamkeit und hoffe auf eure Hilfe Gruß, Max |
Re: PlugIn Schnittstelle - DLL
Hast du den Kommentar gelesen, der in jedem DLL-Prjekt oben drin steht? :)
Hast du die Unit eingebunden? |
Re: PlugIn Schnittstelle - DLL
Zum Grusse!
Aber natürlich, die "ShareMem.pas" befindet sich in beiden Projekten an Stelle 1. Ich wollte es sogar mit FastMM4 lösen, jedoch komme ich dort nichtmal bis zum OnShow Event, das Programm stirbt schon viel früher und verabschiedet sich mit einer AC. Würde sich diese essentielle Unit nicht im Projekt befinden, würde ja der String-Austausch auch nicht funktionieren, daran liegt's wohl nicht. Bitte um weitere Antworten, Gruß, Max PS: Wenn mehr Quellcode benötigt wird, einfach Sagen welchen und ihr sollt ihn bekommen ;) |
Re: PlugIn Schnittstelle - DLL
Versuch's mal so: (ungetestet)
Delphi-Quellcode:
Was Du gemacht hast ist naemlich, dem Result den Pointer auf das lokal erstellte Bitmap zu setzen. Da Du dann aber das Bitmap mit free wieder freigibst, ist logisch dass da nichts ankommt.
function TPlugIn01.Loadmage(Filename: String): TBitmap;
begin Result := TBitmap.Create; Result.LoadFromFile(Filename); MessageBox(Parent, PChar(IntToStr(Result.Width)), '', 0); end; Gruesse, Lizzy |
Re: PlugIn Schnittstelle - DLL
Jetzt sagt er mir "Cannot assign a TBitmap to a TBitmap" in dem Moment wenn das Image das Tbitmap mit assign übernimmt.
Gruß, Max |
Re: PlugIn Schnittstelle - DLL
Zitat:
Gruesse, Lizzy |
Re: PlugIn Schnittstelle - DLL
Ok, und wie schaffe ich es die VCL reinzupacken?
Klingt jetzt vielleicht dumm und ich weiss bestimmt was du meinst nur eben momentan nicht ;) Gruß, Max |
Re: PlugIn Schnittstelle - DLL
Du müsstest statt DLLs Packages verwenden, wenn ich das richtig beim überfliegen gelesen hab. Eine Anleitung dazu findest du z.B. hier
![]() Gruß alias5000 |
Re: PlugIn Schnittstelle - DLL
Guten Abend!
Heisst das, es ist nicht möglich das über eine Dll zu regeln? Das kann ich mir nicht vorstellen, da es ja andere Projekte offenbar ähnlich lösen, ausserdem ist die Umstieg auf Packages schlecht, da damit die möglichkeit der erweiterung des Programmes durch andere Compiler(C++, f.e.) umgeworfen wird. Es muss doch irgendwie gehen. Ein weiteres Mal bitte ich um Hilfe Gruß, Max |
Re: PlugIn Schnittstelle - DLL
Naja, dlls unterstüzen halt keine OOP
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 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