<?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[dll pluginsystem]]></title><description><![CDATA[<p>tach zusammen (war schon lange nicht mehr hier <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>
<p>ich schreibe gerade ein pluginsystem das in etwa so laufen sollte.<br />
ich habe eine basisklasse von der alle plugins erben und die abgeleitete<br />
klasse wird in der dll instanziert und gibt mir einen zeiger zurück.<br />
mein problem ist das ich die dll wieder entladen möchte (denn eigentlich brauche ich sie nicht mehr) aber den instanzierten speicher möchte ich behalten.<br />
aber die laufzeitumgebnung räumt einfach zu viel auf und ich kann den zeiger nicht mehr derefenzieren.</p>
<p>pseudo code:</p>
<pre><code class="language-cpp">typedef std::map&lt;std::string, Converter*&gt; factory_type;
// verzeichniss auslesen und in vector speichern ...
for(file_list_type::iterator it = file_list.begin(); it != file_list.end(); ++it)
{
    PluginLoader loader((*it).c_str());

    Converter *p = loader.CreateObject&lt;Converter&gt;(&quot;GetPlugin&quot;);

    if(p) factory.insert(factory_type::value_type(p-&gt;GetExtension(), p));

    // hier verlasse ich natürlich den scope und die dll wird wieder entladen
}
// ...
factory_type::iterator it = factory.find(xyz);
if(it != factory.end())
    (*it-&gt;second).Load(zyx);
</code></pre>
<p>natürlich könnte ich auch die loader dynamisch machen und die dll einfach geladen lassen aber das ist nicht das was ich will.<br />
hat irgendjemand ein paar verbesserungsvorschläge oder andere ideen?</p>
<p>[ot]<br />
muss sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> :xmas1: :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/130341/dll-pluginsystem</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 17:11:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/130341.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Dec 2005 09:03:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dll pluginsystem on Thu, 22 Dec 2005 09:03:10 GMT]]></title><description><![CDATA[<p>tach zusammen (war schon lange nicht mehr hier <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>
<p>ich schreibe gerade ein pluginsystem das in etwa so laufen sollte.<br />
ich habe eine basisklasse von der alle plugins erben und die abgeleitete<br />
klasse wird in der dll instanziert und gibt mir einen zeiger zurück.<br />
mein problem ist das ich die dll wieder entladen möchte (denn eigentlich brauche ich sie nicht mehr) aber den instanzierten speicher möchte ich behalten.<br />
aber die laufzeitumgebnung räumt einfach zu viel auf und ich kann den zeiger nicht mehr derefenzieren.</p>
<p>pseudo code:</p>
<pre><code class="language-cpp">typedef std::map&lt;std::string, Converter*&gt; factory_type;
// verzeichniss auslesen und in vector speichern ...
for(file_list_type::iterator it = file_list.begin(); it != file_list.end(); ++it)
{
    PluginLoader loader((*it).c_str());

    Converter *p = loader.CreateObject&lt;Converter&gt;(&quot;GetPlugin&quot;);

    if(p) factory.insert(factory_type::value_type(p-&gt;GetExtension(), p));

    // hier verlasse ich natürlich den scope und die dll wird wieder entladen
}
// ...
factory_type::iterator it = factory.find(xyz);
if(it != factory.end())
    (*it-&gt;second).Load(zyx);
</code></pre>
<p>natürlich könnte ich auch die loader dynamisch machen und die dll einfach geladen lassen aber das ist nicht das was ich will.<br />
hat irgendjemand ein paar verbesserungsvorschläge oder andere ideen?</p>
<p>[ot]<br />
muss sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> :xmas1: :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/947599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/947599</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 22 Dec 2005 09:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 17:03:40 GMT]]></title><description><![CDATA[<p>[push] :xmas1: :xmas2:<br />
hat keiner ne idee, wie ich die instanz behalte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948763</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 23 Dec 2005 17:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 17:30:28 GMT]]></title><description><![CDATA[<p>Du kannst die DLL nicht entladen solange du Funktionen aus dieser benutzen willst. Ich geh mal davon aus, dass du virtuelle Funktionen benutzt, also musst du die DLL im Speicher halten um auf die Funktionn und die VTable zugreifen zu können. Das Problem mit dem Speicher ist leicht gelösst dadurch, dass du dem Plugin einen Zeiger auf die Speicherallokationsfunktion des Hauptmoduls übergibts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948780</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Fri, 23 Dec 2005 17:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 17:45:38 GMT]]></title><description><![CDATA[<p>so weit klar ich dacht blos nicht windows mit new allokierten von sich aus wieder löscht. macht vielleicht auch sinn da nicht jeder seinen speicher im hundertprozent aufräumt und einen &quot;chaotischen&quot; heap zurücklässt.</p>
<p>Ben04 schrieb:</p>
<blockquote>
<p>Das Problem mit dem Speicher ist leicht gelösst dadurch, dass du dem Plugin einen Zeiger auf die Speicherallokationsfunktion des Hauptmoduls übergibts.</p>
</blockquote>
<p>kann dir gerade nicht folgen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948792</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 23 Dec 2005 17:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 18:28:07 GMT]]></title><description><![CDATA[<p>Wenn du in beiden Teilen (also EXE und DLL) die msvcrt.dll verwendest, dürfte er den Speicher nicht wegräumen. (Bin mir nicht 100%, aber ziemlich sicher).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948810</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Fri, 23 Dec 2005 18:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 18:38:59 GMT]]></title><description><![CDATA[<p>verwende kein vc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948815</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 23 Dec 2005 18:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 18:56:13 GMT]]></title><description><![CDATA[<p>Sondern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948830</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Fri, 23 Dec 2005 18:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 19:06:00 GMT]]></title><description><![CDATA[<p>Ringding schrieb:</p>
<blockquote>
<p>Sondern?</p>
</blockquote>
<p>mingw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948837</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 23 Dec 2005 19:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 20:23:47 GMT]]></title><description><![CDATA[<p>Das arbeitet doch soundso mit msvcrt.dll. Ich weiß allerdings nicht, ob das immer so ist oder optional.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948858</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Fri, 23 Dec 2005 20:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to dll pluginsystem on Fri, 23 Dec 2005 20:43:03 GMT]]></title><description><![CDATA[<p>Ringding schrieb:</p>
<blockquote>
<p>Das arbeitet doch soundso mit msvcrt.dll. Ich weiß allerdings nicht, ob das immer so ist oder optional.</p>
</blockquote>
<p>ich sizte nicht an einem windows rechner sonst könnte ich es überprüfen. <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/948868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948868</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 23 Dec 2005 20:43:03 GMT</pubDate></item></channel></rss>