Nach mühevoller Kleinarbeit kann ich DLLs erzeugen und Funktionen aus den DLLs auch nutzen (via lib-Datei). Das gilt auch für einzelne Methoden aus Klassen.
Was mir nicht gelingt: Klassen mit allen Eigenschaften und Methoden in einer DLL unterzubringen und diese dann zu linken, damit mir die ganze Funktionalität der Klasse zur Verfügung steht. -- ifS (immer fröhliches Schaffen) theosoft
Solltest du möglichst auch nicht machen weil es da keinen festen Standard gibt. D.h. jeder Compiler bzw Compilerhersteller kann da seine eigenen Eigenarten haben, sodass du dann eine DLL die mit einem Borland Compiler erstellt wurde und eine Klasse exportiert nicht mit einer Visual C++ Anwendung verwenden kannst...
Danke für die Antwort. Ich werde einzelne Funktionen in die DLL packen.
Bei GUI-Programmen wäre es aber nicht schlecht, wenn man eine komplette Klassen-Unit in eine DLL packen könnte, selbst mit dem Nachtei, auf eine IDE begrenzt zu sein. Würde das mit meiner alten Version 4 des Borland c++ Builders überhaupt gehen? -- ifS (immer fröhliches Schaffen) theosoft
Ich weiss nicht wo genau das Problem ist ... aber so wie bei der Funktion klappt es bei der Klasse nicht - ich mache da wohl was grundlegendes falsch!?
Programm das sie DLL benutzt: Schnipsel aus dem Header
//__declspec(dllexport) class Crechnen // beides funkt nicht class__declspec(dllexport) Crechnen { public: int addieren(int _zahl) { return (200 + _zahl); } }; //---------------------------------------------------------------------------
Die Funktion "doppel" kann ich verwenden, die Methode "addieren" aus der Klasse Crechnen spielt nicht mit -- ifS (immer fröhliches Schaffen) theosoftDieser Post wurde am 29.05.2006 um 18:35 Uhr von theosoft editiert.
1. Importierst du die Klasse nirgendwo, sondern definierst in deinem Header eine neue. 2. Bei "rechnen->addieren(1)": Wo soll denn deine Instan "rechnen" plötzlich herkommen?
thx ... aber es bleiben Fragen: Ich habe dem Projekt die generierte *.lib hinzu gefügt. Das genügt wohl nicht zum Importieren!? Ich habe im Header auch schon ...
C++:
class__declspec(dllimport) Crechnen ...
getestet, leider ohne Erfolg.
In meiner Anwendung habe ich schon
C++:
Crechnen *rechnen;
stehen, aber damit bilde ich dann wohl nur eine Instanz der Klasse aus meinem Header, die ja keine Implementationen enthält - hmmm fatal !
Aber warum funktioniert die Funktion "doppel" aus der DLL ?
Kann es sein, dass ich mich zu sehr an folgende Aussage geklammert habe?
Zitat von Gefürchteter Pirat:
Ne Klasse wird genauso wie ne Funktion ex-/importiert.
uppps, ich hab's euch mal wieder nicht leicht gemacht aber, jetzt hab' ich's.
Vielen Dank für eure Mühe und Geduld!
@Guybrush Threepwood: Wenn ich die Memberfunktion (in deinem Beispiel ist es der Konstruktor) intern - in der Klassendeklaration - vornehme funktioniert es nicht mehr. Folgendes funktioniert nicht: