ich hab nen kleines problem und bin mir unsicher wie ich das lösen soll..
Ich hab mir ja mittlerweile ne recht umfangreiche library gebastelt für alle möglichen Anwendungsfälle. Um die zu nutzen habe ich bisher einfach eine static-library daraus erzeugt und die bei allen projekten wo ich es brauche eingebunden.
Da ich aber in der library auch teilweise fremd-libs verwende (z.B. ffmpeg, libtiff, libpng, OpenAL, OpenGL etc etc) und aber die ja nicht zwingend bei jedem projekt brauche, habe ich das bisher so gelöst das ich einfach per #DEFINE teile ausgegrenzt habe.
Das könnte ich zwar eigentlich einfach weiterhin so machen, aber irgendwie ist es schon ein wenig unschön..
Deswegen bin ich am überlegen wie ich das ganze umstrukturiere.
Meine Ideal lösung wäre ein Plugin system, so das ich z.B. die klasse zum laden der TIFF-Bilder einfach in eine DLL/SO/DynLib auslagere und wenn die halt da ist kann ich tiffs laden, wenn nicht eben nicht
Da ist jetzt nur das Problem das ich mich mit DLL/SO/DynLib nich soooo sehr auskenne, und deswegen nicht sicher bin ob das geht so wie ich es mir vorstelle:
Am beispiel vom TIFF-Reader/Writer:
Die Klasse TiffIO ist bei mir abgeleitet von BitmapIO und registriert sich am anfang (via static variable) bei der BitmapIO klasse als reader/writer für *.tif dateien.
Wenn ich dann hergehe und:
Code:
CIBitmap bitmap;
bitmap.loadFromFile("./test.tif");
aufrufe, wird automatisch die TiffIO klasse benutzt zum laden des bildes.
Diese funktionalität möchte ich aufjedenfall behalten wenn ich das in eine DLL auslagere! Nur.. wie mach ich das am geschicktesten?
Ich kenne es eigentlich nur so, das man halt funktionen in DLLs aufrufen kann... sprich, ich müßte vermutlich mir einen Plugin Manager basteln welcher von allen DLLs die er im plugins-ordner findet (bzw die, die der user ihm gibt) eine funktion "initPlugin" oder ähnliches aufruft.
ABER: Dann müßte ja die InitPlugin funktion vermutlich die TiffIO klasse beim BitmapIO registrieren, oder? Oder funktionieren die Static-geschichten auch aus einer DLL heraus?
Und, mal angenommen ich würde der TiffIO klasse noch eine extra funktion geben die nix mit BitmapIO zu tun hat, die ich aber trotzdem gern mal aufrufen möchte... dann müßte ich von hand die möglichkeit haben eine instanz von TiffIO zu ersetllen und zu benutzen:
Code:
TiffIO io;
io.doSomethingFunny();
geht das..? Also das ich den header nutzen kann aber die implementation eben in ner externen DLL ist...
Die einzigem möglichkeit die mir aktuell einfällt und wie ich es auch früher bei meinem Flipbook gemacht habe ist halt, das ich eine funktion "initPlugin" mache welche eben eine neue instanz der Klasse zurückliefert:
Was spricht dagegen aus der Aya_eine_für_alles.dll eine Aya_für_3D.dll und eine Aya_für_Schrift.dll und eine Aya_für_Sound.dll usw. zu machen?
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm ... Wenn du noch Pascal-(Lese)-Skills hast, kannst du dir mal die Implementation des Registrierungsservers von Andorra anschauen. Ich hab da mal vorbei geschaut, das ist ja sehr faszinierend implementiert (ich bin mir ziemlich sicher, dass es Andorra war). Dort werden die einzelnen Grafikschnittstellen auch in DLLs ausgelagert. Die Registrierung geschieht dann über Callbacks, die bei so einer initPlugin-Artigen Methode übergeben werden, wenn ich mich recht erinnere. Für deine Sache mit den Methoden, die nicht in BitmapIO zu finden sind, da wirst du es mit C(++) noch etwas einfacher haben, weil du dort Header und Implementation getrennt hast.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.