Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Klassen in DLLs verpacken (https://www.delphipraxis.net/72856-klassen-dlls-verpacken.html)

Akku 8. Jul 2006 00:00


Klassen in DLLs verpacken
 
hi,
ich würde gerne eine Klasse in eine DLL packen.

Man soll unter "exports" die Funktionen angeben, die nach außen hin bekannt sind. Wenn ich aber nun nur Klassenmethoden in meiner DLL habe - was schreibe ich dann dort hin?
Klassenname.Methodenname funktioniert nicht.

Danke schon mal für die Hilfe!

Gruß Max

Chewie 8. Jul 2006 00:17

Re: Klassen in DLLs verpacken
 
Ganz einfach: Es geht nicht ;) Dafür sind DLLs nicht da.

Was du willst wird aber von Packages erfüllt. Du bist dann halt auf Delphi beschränkt, aber das bist du ohnehin, wenn du Objekte verwendest.

Oxmyx 8. Jul 2006 00:20

Re: Klassen in DLLs verpacken
 
Du erstellst eine rein virtuelle Basisklasse, davon dann eine abgeleitete Klasse, die die Methoden implementiert. Dazu machst du eine Funktion, die in der DLL eine Instanz der Klasse erzeugt und zurückgibt. Lediglich diese Funktion musst du exportieren. In deinem Hauptprogramm muss ebenfalls die Deklaration der rein virtuellen Basisklasse bekannt sein. Dann nimmst du einfach eine Objektvariable der rein virtuellen Klasse, und weist den Rückgabewert deiner exportierten Funktion zu. Und schon kannst du die Methoden in der DLL aufrufen.

edit: Der Vollständigkeit halber sei erwähnt, dass du auf diese Weise bei jedem Methodenaufruf eine Zeigerindirektion hast, was aber in fast allen Fällen kein zeitkritisches Problem darstellen sollte.

Akku 8. Jul 2006 17:43

Re: Klassen in DLLs verpacken
 
alles klar!

danke für die Hilfe - mal schauen, wie weit ich komme :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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