Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Klasse in DLL speichern
xdragon2009 - Fr 20.11.09 13:11
Titel: Klasse in DLL speichern
Hallo,
wie kann ich in Delphi eine Klasse in einer DLL speichern?
Danke im Voraus.
jaenicke - Fr 20.11.09 13:12
Wie meinst du das? Wenn du eine neue DLL erstellst, kannst du dort Typen genauso deklarieren wie sonst auch. :gruebel:
FinnO - Fr 20.11.09 13:13
naja, die Klasse halt in der DLL erstellen. Dabei darauf achten, dass sie von einer abstrakten Klasse abgeleitet wurde, die in einer Unit erstellt ist. Jetzt noch den Creator als Objekt deklarieren und fertig?
Müsste zur Not sonst nach Codebeispielen graben.
xdragon2009 - Fr 20.11.09 13:40
Hallo ihr beiden,
Funktionen in eine DLL zu packen, ist ja kein Problem. Aber eine Klasse bekomme ich nicht hin. Habt ihr evtl. ein kleines Beispiel? Wäre super.
jaenicke - Fr 20.11.09 14:01
xdragon2009 hat folgendes geschrieben : |
| Aber eine Klasse bekomme ich nicht hin. |
Ich verstehe nicht wo das Problem ist, das ist das Problem... Es funktioniert
exakt genauso wie sonst...
Wie hast du es denn versucht (Quelltext) und was ist passiert?
xdragon2009 - Fr 20.11.09 16:07
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TAuto = class private FFarbe:string; FBaujahr:integer; procedure SetFarbe(Farbe:string); public property Farbe: string read FFarbe write SetFarbe; end;
procedure TAuto.SetFarbe(Farbe: string); begin if (farbe = 'rot') or (farbe = 'blau') or (farbe = 'gruen') then FFarbe := Farbe; end;
exports tauto; |
Fehlermeldung: TAuto kann nicht exportiert werden
Moderiert von
Narses: Highlight- durch Delphi-Tags ersetzt
jaenicke - Fr 20.11.09 16:19
Ach so meinst du das...
Wie soll das gehen? Delphi braucht die Deklaration doch im Programm selbst um damit arbeiten zu können. Also was hat es für einen Sinn das zu exportieren, selbst wenn es möglich wäre? :gruebel:
Du kannst in der DLL und im Programm die selbe Unit (mit der Klasse) einbinden um die selbe Deklaration in beidem zu nutzen.
xdragon2009 - Fr 20.11.09 16:21
Funktionen/Prozeduren kann man ja auch exportieren. Geht das also bei Klassen generell nicht?
jaenicke - Fr 20.11.09 16:24
Nein, wozu auch? Bei der Funktion brauchst du deren Deklaration ja auch im Programm. Und bei der Klasse also auch. Dann ist diese aber ohnehin schon im Programm.
Meinst du vielleicht so etwas wie ein Plugin? Dafür eignen sich Interfaces, so dass die Deklaration im Programm vorhanden ist, aber nicht die Klasse selbst. Damit funktioniert auch dieses Pluginframework:
http://www.delphi-forum.de/topic_PluginSystem+Version+3_93765.html
xdragon2009 - Fr 20.11.09 16:26
Mein Gedanke war, diese DLL mit Funktionen und Klassen in anderen Programmiersprachen verwenden zu können. Mit Funktionen klappt es wunderbar, nur scheitert es bei den Klassen :(.
jaenicke - Fr 20.11.09 16:28
Alles was du aus einer DLL verwenden willst, musst du in der entsprechenden Sprache auch als Headerdatei vorliegen haben...
Genauso ist es bei exportierten Funktionen auch. Du kannst doch auch nicht einfach eine Funktion aus einer DLL verwenden, deren Deklaration du in der Sprache nicht hast.
guinnes - Fr 20.11.09 16:30
xdragon2009 hat folgendes geschrieben : |
| Mein Gedanke war, diese DLL mit Funktionen und Klassen in anderen Programmiersprachen verwenden zu können. Mit Funktionen klappt es wunderbar, nur scheitert es bei den Klassen :(. |
Wie soll das bei Klassen gehen, wie soll ein C++ Programm eine Pascal-Deklaration verstehen ? Auf der Binär-Seite sieht es wohl noch schlimmer aus : Was soll ein Java-Programm mit einer Delphi VMT ?
xdragon2009 - Fr 20.11.09 16:34
Bei Funktionen geht es doch ganz einfach, indem man die DLL lädt und die Funktionen mit den entsprechenden Parametern aufruft. Zum Beispiel die Windows API Funktionen...
guinnes - Fr 20.11.09 16:50
Funktionen laufen ja auch quasi im eigene Saft. Eine Klasse braucht immer auch seine sämtlichen Vorfahren.
Ich hab da mal Dll's geschrieben, die Objekte zurückgeben, aber das ist was anderes. Diese Objekte sind auch nur mit Delphi der gleichen Version benutzbar
xdragon2009 - Fr 20.11.09 18:43
Aber mit Klassen muss es doch auch irgendwie möglich sein oder?
delfiphan - Fr 20.11.09 19:09
Was du willst gibt es direkt nicht für Delphi/Win32. Zum einen gibt es zwar die Packages, die DLLs sind, diese können aber nicht ohne weiteres von einer anderen Sprache aus verwendet werden.
Allenfalls kommst du mit COM relativ nahe an dein Ziel ran.
Delete - Fr 20.11.09 23:03
xdragon2009 hat folgendes geschrieben : |
| Aber mit Klassen muss es doch auch irgendwie möglich sein oder? |
Ein "Nein, das geht nicht.", akzeptierst du irgendwie nicht oder?
xdragon2009 - Sa 21.11.09 09:17
Geht nicht, gibts nicht :). Und es geht! Ein aufmerksamer Leser hat mir den entscheidenen Tip gegeben. Vielen Dank für die Hilfe.
Delete - Sa 21.11.09 17:52
xdragon2009 hat folgendes geschrieben : |
| Geht nicht, gibts nicht :). Und es geht! Ein aufmerksamer Leser hat mir den entscheidenen Tip gegeben. Vielen Dank für die Hilfe. |
Könntest du die Lösung noch mal nennen? Da bin ich aber gespannt.
guinnes - Sa 21.11.09 19:26
Luckie hat folgendes geschrieben : |
| Könntest du die Lösung noch mal nennen? Da bin ich aber gespannt. |
Da glaubst du doch jetzt nicht wirklich dran, dass da was kommt ?
Delete - Sa 21.11.09 20:15
Die Hoffnung stirbt zu letzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!