![]() |
Klassenableitung in DLL auslagern?
Moin !
Wir haben in unserer Software eine Klasse. Vereinfacht schaut die so aus:
Delphi-Quellcode:
Dann haben wir Units in denen ebenfalls eine Klasse definiert wird, welche die Klasse TLVDevice erbt:
type TLVDevice = class(TPersistent)
public DeviceID: TLVDeviceID; // ID des Gerätes Name : ShortString; // Name des Gerätes constructor Create(Owner: TObject); procedure Free; virtual; procedure InitValues(Kanal: TLVKanal); virtual; function GetMaxKanal: TLVKanal; virtual; published protected end;
Delphi-Quellcode:
Ist alles stark verkürzt, aber es geht eh nur ums Prinzip.
type
TLVTEST = class(TLVDevice) public constructor Create(Owner: TObject); function GetMaxKanal: TLVKanal; override; private end; Im Programm selber wird dann irgendwann eine Instanz der Klasse erzeugt mittels:
Delphi-Quellcode:
Wäre es nun möglich, dass man die Klasse TLVTEST in eine DLL auslagern würde?
PresentDevice := TLVTEST.Create(MainForm);
Was wäre dabei alles zu beachten, wenn es denn geht? |
Re: Klassenableitung in DLL auslagern?
Klassen und DLLs sind nicht unbedingt Konzepte, die gut zusammenpassen. Da DLL und Anwendung unterschiedliche Speichermanager benutzen, ist ein Objekt, welches in der DLL erzeugt wurde nicht gleich dem Objekt, welches in der Anwenung dann benutzt wird oder benutzt werden soll. Eine Ausnahme stellt das COM/ActiveX Konzept dar. allerdings wird hie rmit Interfaces gearbeitet.
Auch hier stellt sich mir erstmal wieder die Frage: Warum? Warum eine DLL? |
Re: Klassenableitung in DLL auslagern?
Moin !
Zitat:
|
Re: Klassenableitung in DLL auslagern?
Wenn du das machst musst du auf jedenfall gemeinsamme Runtimepackages (BPL's) verwenden.
Ansonsten gibt es immer Probleme. Hatten erst den Fall das eine solche Einbindung (Objekt aus DLL ohne Runtimepackages) an einer komplett andere Stelle gekracht hat. Fehlersuche ist natürlich damit sehr schwer. |
Re: Klassenableitung in DLL auslagern?
Zitat:
|
Re: Klassenableitung in DLL auslagern?
Moin !
Ok, dann währe wohl folgendes sinnvoller .... In der Anwendung eine abgeleitete Klasse von TLVDevice erstellen. In den Methoden werden dann aber einzelne Funktionen / Proceduren einer DLL verwendet. Also dann in etwa so:
Delphi-Quellcode:
Damit hätten wir eine allgemein gültige Geräteklasse und je nach Gerät werden da Methoden aus einer Geräte DLL gemappt.
function TLVTEST.GetMaxKanal: Integer;
begin GetMaxKanal := DLL_GetMaxKanal; end; |
Re: Klassenableitung in DLL auslagern?
das würde noch gehn
Delphi-Quellcode:
oder nimm lieber gleich Interfaces
function TLVTEST.GetMaxKanal: Integer;
begin GetMaxKanal := DLL_GetMaxKanal; end; ich hab zwar auch schon eine Klasse in EXE/DLL verteilt, aber da stecken Monate an Arbeit drin und selbt jetzt weiß ich nichtmal, ob wirklich alles geht. > in der einen DLL-Version von himXML verbaut aber dafür waren Umleitungen des Speichermanagers (ist recht leicht und unter Anderem als ShareMem bekannt) und vorallem ein Verbiegen der RTTI nötig (welches nicht grad tivial ist) das sind noch die harmlosesten Probleme, welche sich mir in diesem Zusammenhang stellten ![]() ![]() und welche ich grad mal schnell fand |
Re: Klassenableitung in DLL auslagern?
Zitat:
|
Re: Klassenableitung in DLL auslagern?
Moin !
Zitat:
In den Units geht es im Grunde nur um das Zerlegen eines Strings in seine Bestandteile und deren Auswertung. Wir haben dafür eine Struktur die sich jetzt wie gesagt schon lange bewährt hat. Zitat:
|
Re: Klassenableitung in DLL auslagern?
Zitat:
Um in Delphi vernünftig zu modularisieren kommt man, glaube ich, an der Com - Technologie nicht vorbei. Ein Com Object ist in sich gekapselt und braucht keine Laufzeit - Bpl. Hier ist sogar das möglich, was in Delphi selbst absolut unmöglich ist , z.B. aus D2009 ein in D7 entwickeltes Modul verwenden. Einen weiteren Vorzeil hat die Com- Technologie. Ich bekomme Net und Delphi in beiden Richtungen zueinander. In D2009 ist das Handling etwas verbessert worden. Von DLL und erst recht BPL würde ich bei der Modularisierung die Pfinger lassen. Wir sind damit gehörig auf die Nase gefallen, da jede BPL gegen die gleiche Compilerversion compiliert sein muss. (Z.B. Drittkomponenten ohne Versionsnummer im BPL-Namen ) Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 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