<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Plugin System]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche zu meiner Library ein Plugin System hinzu zu bauen.<br />
Das ganze soll etwa so aussehen:<br />
- Ein Plugin kann über eine irgendwie globale Funktion sich selbst zu einer internen Liste aus Plugins hinzuaddieren<br />
- Alle Plugins sind abgeleitet von der selben virtuellen Klasse &quot;PluginGeneric&quot;<br />
- Meine Hauptklasse &quot;Archivia&quot; soll die Plugin-Liste der Reihe nach durchgehen und zu jedem die (statische) Funktion <em><em>bool Plugin-&gt;isApplicable(char</em> data);</em>* ausführen.</p>
<p>Meine Fragen sind folgende:</p>
<p>1. Kann ich in meiner Hauptklasse eine statische Funktion und Variable definieren, und diese .h Datei dann trotzdem bedenkenlos in shared libs oder static libs includen? Meine Befürchtung ist, dass am Ende die statische Variable zwei mal existiert - einmal in der DLL von meiner HauptLib und einmal in der DLL vom Plugin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>2. Wie kann ich eine AddToPluginList Funktion bauen? Da die Klassen selbst ja nicht instanziert sind kann ich ja nicht einfach AddToPluginList(PluginGeneric*) machen.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315572/plugin-system</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 18:04:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315572.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Apr 2013 23:12:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Plugin System on Fri, 05 Apr 2013 23:15:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche zu meiner Library ein Plugin System hinzu zu bauen.<br />
Das ganze soll etwa so aussehen:<br />
- Ein Plugin kann über eine irgendwie globale Funktion sich selbst zu einer internen Liste aus Plugins hinzuaddieren<br />
- Alle Plugins sind abgeleitet von der selben virtuellen Klasse &quot;PluginGeneric&quot;<br />
- Meine Hauptklasse &quot;Archivia&quot; soll die Plugin-Liste der Reihe nach durchgehen und zu jedem die (statische) Funktion <em><em>bool Plugin-&gt;isApplicable(char</em> data);</em>* ausführen.</p>
<p>Meine Fragen sind folgende:</p>
<p>1. Kann ich in meiner Hauptklasse eine statische Funktion und Variable definieren, und diese .h Datei dann trotzdem bedenkenlos in shared libs oder static libs includen? Meine Befürchtung ist, dass am Ende die statische Variable zwei mal existiert - einmal in der DLL von meiner HauptLib und einmal in der DLL vom Plugin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>2. Wie kann ich eine AddToPluginList Funktion bauen? Da die Klassen selbst ja nicht instanziert sind kann ich ja nicht einfach AddToPluginList(PluginGeneric*) machen.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2313023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2313023</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 05 Apr 2013 23:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to Plugin System on Fri, 05 Apr 2013 23:29:12 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Factory_method_pattern" rel="nofollow">http://en.wikipedia.org/wiki/Factory_method_pattern</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2313024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2313024</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 05 Apr 2013 23:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to Plugin System on Sat, 06 Apr 2013 00:07:11 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p><a href="http://en.wikipedia.org/wiki/Factory_method_pattern" rel="nofollow">http://en.wikipedia.org/wiki/Factory_method_pattern</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Danke.<br />
Aber ich denke, es funktioniert nicht. Bei dem Factory-Dings braucht man offenbar eine Funktion, die alle Plugins kennt (hardcoded). Naja, und das geht bei mir nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2313026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2313026</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 06 Apr 2013 00:07:11 GMT</pubDate></item><item><title><![CDATA[Reply to Plugin System on Sat, 06 Apr 2013 03:20:16 GMT]]></title><description><![CDATA[<p>Ich denke du brauchst irgendeinen Pluginloader der die DLLs läd und eine Initialisierungsfunktion aufruft. Die Plugins können in einem XML stehen oder in einem bestimmten Ordner liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2313033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2313033</guid><dc:creator><![CDATA[1234r5tzuki]]></dc:creator><pubDate>Sat, 06 Apr 2013 03:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Plugin System on Sat, 06 Apr 2013 18:03:02 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>habe mich im Zuge meienr Arbeit auch mal damit beschäftigt, es dauert aber noch bis ich es erstmals implementieren werde, ich kann dir aber vorab schonmal folgende Tipps geben.</p>
<p>Für das Pluginsystem solltest du Interface-Klassen verwenden, von denen deine Plugins abgeleitet werden. Somit kennt der Loader den Typ des Plugins und du musst onehin definieren welche Plugins welche Funktionen erweitern dürfen.<br />
Am besten gibts du deinem Interface auch eine Methode um eine Instanz zu erzeugen und eine um sie wieder zu zerstören.<br />
<a href="http://stackoverflow.com/questions/431533/c-dynamically-loading-classes-from-dlls" rel="nofollow">http://stackoverflow.com/questions/431533/c-dynamically-loading-classes-from-dlls</a></p>
<p>Eine alternative hierfür wäre, dass du dich der Methodik von Erweiterungsfunktionen bedienst und qausi nur Funktionen aus deinen Plugins lädst. Dazu kannst du z.b. unter Windows mit</p>
<pre><code>//at startup
LoadLibrary
GetProcAddress

//at unload
FreeLibrary
</code></pre>
<p>einen Funktionspointer deiner Erweiterungsmethode erzuegen lassen und diesen dann an entsprechender stelle aufrufen. Du musst natürlich dann die Struktur des Pointers kennen/definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2313224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2313224</guid><dc:creator><![CDATA[Pria]]></dc:creator><pubDate>Sat, 06 Apr 2013 18:03:02 GMT</pubDate></item></channel></rss>