<?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[Erweiterbarkeit um neue Funktionen]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie würdet ihr so etwas konzeptionell angehen:</p>
<p>Ein Programm, das ein paar Standardfunktionen anbietet, soll auf möglichst einfache Weise um weitere Funktionen ergänzt werden, ohne jedoch dabei an zu vielen Stellen im bereits existierenden Programmcode Änderungen vornehmen zu müssen.</p>
<p>Ideal wäre so etwas wie eine Funktionsregistrierungsklasse (FRK) o. ä. der man die neue Funktion (die in eigenen Dateien .h/.cpp liegt) bekannt macht. Diese FRK wird im Hauptprogramm verwendet und stellt alle Funktionen zur Verfügung. Auf diese Weise müsste man am Hauptprogramm gar nichts ändern, sondern nur in der FRK.</p>
<p>Gibts dafür ein Muster o. ä.?</p>
<p>Danke für jeden gut gemeinten Rat!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224826/erweiterbarkeit-um-neue-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 03:29:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224826.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Oct 2008 15:05:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Wed, 15 Oct 2008 15:05:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie würdet ihr so etwas konzeptionell angehen:</p>
<p>Ein Programm, das ein paar Standardfunktionen anbietet, soll auf möglichst einfache Weise um weitere Funktionen ergänzt werden, ohne jedoch dabei an zu vielen Stellen im bereits existierenden Programmcode Änderungen vornehmen zu müssen.</p>
<p>Ideal wäre so etwas wie eine Funktionsregistrierungsklasse (FRK) o. ä. der man die neue Funktion (die in eigenen Dateien .h/.cpp liegt) bekannt macht. Diese FRK wird im Hauptprogramm verwendet und stellt alle Funktionen zur Verfügung. Auf diese Weise müsste man am Hauptprogramm gar nichts ändern, sondern nur in der FRK.</p>
<p>Gibts dafür ein Muster o. ä.?</p>
<p>Danke für jeden gut gemeinten Rat!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599466</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Wed, 15 Oct 2008 15:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Wed, 15 Oct 2008 15:17:57 GMT]]></title><description><![CDATA[<p>Noch schöner wäre ein System über Plugins.<br />
Infos z.B. <a href="http://www.nuclex.org/articles/building-a-better-plugin-architecture" rel="nofollow">http://www.nuclex.org/articles/building-a-better-plugin-architecture</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599476</guid><dc:creator><![CDATA[mad_martin]]></dc:creator><pubDate>Wed, 15 Oct 2008 15:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Wed, 15 Oct 2008 15:28:58 GMT]]></title><description><![CDATA[<p>Cool, danke schon mal, werde ich mir nachher mal in Ruhe durchlesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599483</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Wed, 15 Oct 2008 15:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 10:30:40 GMT]]></title><description><![CDATA[<p>So, hab mir das mal durchgelesen. Wie es aussieht, ist der Einsatz des dort beschriebenen Plugin-Systems auf Windows-Systeme beschränkt, da DLL-Dateien verwendet werden. Wie könnte man so etwas denn möglichst portabel gestalten. Gibt es so etwas wie &quot;plattformunabhängige DLLs&quot;? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599837</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Thu, 16 Oct 2008 10:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 10:36:36 GMT]]></title><description><![CDATA[<p>TheBrain schrieb:</p>
<blockquote>
<p>So, hab mir das mal durchgelesen. Wie es aussieht, ist der Einsatz des dort beschriebenen Plugin-Systems auf Windows-Systeme beschränkt, da DLL-Dateien verwendet werden. Wie könnte man so etwas denn möglichst portabel gestalten. Gibt es so etwas wie &quot;plattformunabhängige DLLs&quot;? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Woran machst Du fest, dass das Tutorial auf Windows beschränkt ist? Dem ist nicht so. Steht sogar gleich im ersten Satz.<br />
Das dynamische Bibliotheken nicht plattformunabhängig sein können, sollte wohl klar sein. Es sei denn, Du nimmst irgendwelche VMs als Plattform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599841</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 16 Oct 2008 10:36:36 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 11:09:08 GMT]]></title><description><![CDATA[<p>Das Prinzip ist immer das gleiche. Das einzige, was sich ändert, sind die Funktionen, um die Funktionen/Methoden der DLLs einzubinden. Und das ist wirklich kinderleicht:</p>
<pre><code class="language-cpp">#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#    define DYNLIB_LOAD( a ) LoadLibraryEx( a, NULL, LOAD_WITH_ALTERED_SEARCH_PATH )
#    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
#    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )

struct HINSTANCE__;
typedef struct HINSTANCE__* hInstance;

#elif OGRE_PLATFORM == OGRE_PLATFORM_LINUX
#    define DYNLIB_HANDLE void*
#    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL)
#    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
#    define DYNLIB_UNLOAD( a ) dlclose( a )
</code></pre>
<p>Hier mal ein Beispiel, wie es die Open-Source-3D-Engine <a href="http://www.ogre.org" rel="nofollow">Ogre</a> macht.</p>
<p>Da nutzt man nur noch die Makros, um die zur Plattform passenden Funktionen auszuwählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599863</guid><dc:creator><![CDATA[mad_martin]]></dc:creator><pubDate>Thu, 16 Oct 2008 11:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 11:44:54 GMT]]></title><description><![CDATA[<p>Ok, habe ich das dann soweit richtig verstanden, dass ich für jedes unterstützte Betriebssystem eine entsprechende Datei benötige (für unixoide Systeme .so, für Windows .dll usw.)?</p>
<blockquote>
<p># define DYNLIB_LOAD( <strong>a</strong> ) LoadLibraryEx( <strong>a</strong>, NULL, LOAD_WITH_ALTERED_SEARCH_PATH )</p>
</blockquote>
<p>Woher kommt hier eigentlich das <strong>a</strong>? Ich nehme an, es steht für eine Pfadangabe. Aber wo wird die konkretisiert? Kann ich dann im Code einfach irgendwo</p>
<pre><code class="language-cpp">DYNLIB_LOAD (&quot;/path/to/my/dl&quot;)
</code></pre>
<p>aufrufen?</p>
<p>Kennt ihr noch weitere gute Tutorials für ein solches Plugin-System bzw. für das Erstellen von dynamic libraries für mehrere OSe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599878</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Thu, 16 Oct 2008 11:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 11:46:55 GMT]]></title><description><![CDATA[<p>a ist in dem Fall stumpf der Parameter des Makros. Könnte auch Uwe dort stehen. <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/1599880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599880</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 16 Oct 2008 11:46:55 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 14:58:44 GMT]]></title><description><![CDATA[<p>Ok, so weit, so gut. Es gibt einige Tutorials für Plugin-Architekturen unter C++ (z. B. <a href="http://yallara.cs.rmit.edu.au/~aholkner/dynload/index.html" rel="nofollow">dieses kurze hier</a>). Allerdings gehen dabei alle davon aus, dass die Plugins eine bestimmte Funktion zur Verfügung stellen, die jeweils die gleichen Parameter und den gleichen Rückgabewert hat. Was jedoch, wenn ich Plugins mit unterschiedlich vielen Argumenten und verschiedenen Rückgabewerten umsetzen möchte? Wie geht man so etwas im &quot;Hauptprogramm&quot; am besten an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599988</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Thu, 16 Oct 2008 14:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbarkeit um neue Funktionen on Thu, 16 Oct 2008 15:06:17 GMT]]></title><description><![CDATA[<p>TheBrain schrieb:</p>
<blockquote>
<p>Allerdings gehen dabei alle davon aus, dass die Plugins eine bestimmte Funktion zur Verfügung stellen, die jeweils die gleichen Parameter und den gleichen Rückgabewert hat.</p>
</blockquote>
<p>Anders wirst du Plugins auch schwerlich umsetzen können. Plugins sollen ja auch die Abhängigkeiten senken, man programmiert nicht gegen ein bestimmtes Plugin, sondern eine allgemeine Schnittstelle. Ggf. kann man auch mehrere Schnittstellen unterstützen, dann muss man aber jede separat behandeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599991</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 16 Oct 2008 15:06:17 GMT</pubDate></item></channel></rss>