Mit QPluginLoader eigene Plugins mehrfach laden
Verfasst: 13. Juli 2010 13:55
Hallo,
wir möchten eine plugin-fähige Qt-Applikation entwicklen, die in der Lage ist mit verschiedenen Schnittstellen zu kommunizieren. Jede Schnittstelle (RS232, USB, Ethernet) soll dabei als Plugin realisiert sein.
Ich habe mir dazu die Qt-Dokumentation zur Klasse QPluginLoader und den Abschnitt "How to Create Qt Plugins" angeschaut.
Wenn ich das richtig verstanden habe, dann kann man zwar über mehrere QPluginLoader-Instanzen ein und dasselbe Plugin mehrfach laden, man bekommt allerdings immer nur einen Zeiger auf dasselbe Objekt im Speicher zurück. Es wird also erkannt, dass ein Plugin bereits geladen ist, es wird keine neue Plugin-Instanz erzeugt.
Um mich zu vergewissern, habe ich ein kleines Demo-Programm geschrieben, welches zwei QPluginLoader Instanzen erzeugt, die dasselbe Plugin laden. Beide geben auch wie dokumentiert einen Zeiger auf denselben Speicherbereich zurück. Dieser Speicherbereich wird erst freigegeben, wenn alle QPluginLoader-Instanzen die Funktion unload() aufgerufen haben.
Jetzt möchten wir aber gerne in der Lage sein, dieselbe Schnittstelle (also dasselbe Plugin) mehrfach zu laden und unterschiedlich zu konfigurieren. Beispielsweise brauchen wir mehrere Instanzen eines RS232-Plugins, eine Instanz soll mit COM1 und mit der Baudrate 57600 kommunizieren, die andere Instanz desselben Plugins soll mit COM3 und der Baudrate 38400 kommunizieren.
Wie kann man das sinnvoll lösen? Oder ist das Qt-Plugin-System dafür nicht der richtige Weg?
Danke für Eure Hilfe im Voraus.
wir möchten eine plugin-fähige Qt-Applikation entwicklen, die in der Lage ist mit verschiedenen Schnittstellen zu kommunizieren. Jede Schnittstelle (RS232, USB, Ethernet) soll dabei als Plugin realisiert sein.
Ich habe mir dazu die Qt-Dokumentation zur Klasse QPluginLoader und den Abschnitt "How to Create Qt Plugins" angeschaut.
Wenn ich das richtig verstanden habe, dann kann man zwar über mehrere QPluginLoader-Instanzen ein und dasselbe Plugin mehrfach laden, man bekommt allerdings immer nur einen Zeiger auf dasselbe Objekt im Speicher zurück. Es wird also erkannt, dass ein Plugin bereits geladen ist, es wird keine neue Plugin-Instanz erzeugt.
Um mich zu vergewissern, habe ich ein kleines Demo-Programm geschrieben, welches zwei QPluginLoader Instanzen erzeugt, die dasselbe Plugin laden. Beide geben auch wie dokumentiert einen Zeiger auf denselben Speicherbereich zurück. Dieser Speicherbereich wird erst freigegeben, wenn alle QPluginLoader-Instanzen die Funktion unload() aufgerufen haben.
Jetzt möchten wir aber gerne in der Lage sein, dieselbe Schnittstelle (also dasselbe Plugin) mehrfach zu laden und unterschiedlich zu konfigurieren. Beispielsweise brauchen wir mehrere Instanzen eines RS232-Plugins, eine Instanz soll mit COM1 und mit der Baudrate 57600 kommunizieren, die andere Instanz desselben Plugins soll mit COM3 und der Baudrate 38400 kommunizieren.
Wie kann man das sinnvoll lösen? Oder ist das Qt-Plugin-System dafür nicht der richtige Weg?
Danke für Eure Hilfe im Voraus.