<?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[[Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Winamp-Plugin geschrieben, welches in Form einer Dll-Datei daherkommt. Ich möchte nun eine Update-Funktion implementieren. Die &quot;neue&quot; Dll-Datei soll dabei auf einem http-server liegen. Soweit so gut.<br />
Ich frage mich, ob es möglich ist, mein Plugin zu updaten, ohne Winamp neu starten zu müssen.<br />
Meine Idee war folgende: Das Plugin erstellt eine temporäre Dll-Datei, sagen wir mal updater.dll und lädt diese mit LoadLibrary, sodass sie sich auch im Adressraum von Winamp befindet. updater.dll lädt nun das update runter, entlädt das Plugin mit FreeLibrary, ersetzt die Dll-Dateien und lädt erneut das Plugin in den Adressraum von Winamp, startet die Einstiegsroutine.<br />
Das neue Plugin entlädt dann updater.dll und löscht diese Datei.</p>
<p>Aber irgendwie scheint das nicht zu funktionieren. Denn sobald ich das Plugin aus updater.dll mit FreeLibrary() freigeben will, stürzt winamp ab.<br />
Ist dies so, weil LoadLibrary() aus einer Dll-Datei die geladene Dll-Datei nicht direkt in den Prozessraum von winamp.exe lädt sondern in den Prozessraum der aufrufenden Dll-Datei? Dann wäre es klar warum updater.dll nicht FreeLibary() aufrufen könnte.<br />
Aber da ich mich mit meinem Plugin ja in winamp befinde, wäre es doch sicherlich irgendwie möglich Winamp direkt zu veranlassen meine updater.dll zu laden, sodass FreeLibrary() keine Probleme mehr machen dürfte, oder?</p>
<p>Vielleicht hat auch jemand eine andere Idee :).</p>
<p>Vielen Dank für Antworten,<br />
Black Shadow</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174036/verständnisfrage-design-dll-quot-on-the-fly-quot-updaten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 22:42:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174036.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Feb 2007 12:01:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Thu, 22 Feb 2007 12:01:20 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Winamp-Plugin geschrieben, welches in Form einer Dll-Datei daherkommt. Ich möchte nun eine Update-Funktion implementieren. Die &quot;neue&quot; Dll-Datei soll dabei auf einem http-server liegen. Soweit so gut.<br />
Ich frage mich, ob es möglich ist, mein Plugin zu updaten, ohne Winamp neu starten zu müssen.<br />
Meine Idee war folgende: Das Plugin erstellt eine temporäre Dll-Datei, sagen wir mal updater.dll und lädt diese mit LoadLibrary, sodass sie sich auch im Adressraum von Winamp befindet. updater.dll lädt nun das update runter, entlädt das Plugin mit FreeLibrary, ersetzt die Dll-Dateien und lädt erneut das Plugin in den Adressraum von Winamp, startet die Einstiegsroutine.<br />
Das neue Plugin entlädt dann updater.dll und löscht diese Datei.</p>
<p>Aber irgendwie scheint das nicht zu funktionieren. Denn sobald ich das Plugin aus updater.dll mit FreeLibrary() freigeben will, stürzt winamp ab.<br />
Ist dies so, weil LoadLibrary() aus einer Dll-Datei die geladene Dll-Datei nicht direkt in den Prozessraum von winamp.exe lädt sondern in den Prozessraum der aufrufenden Dll-Datei? Dann wäre es klar warum updater.dll nicht FreeLibary() aufrufen könnte.<br />
Aber da ich mich mit meinem Plugin ja in winamp befinde, wäre es doch sicherlich irgendwie möglich Winamp direkt zu veranlassen meine updater.dll zu laden, sodass FreeLibrary() keine Probleme mehr machen dürfte, oder?</p>
<p>Vielleicht hat auch jemand eine andere Idee :).</p>
<p>Vielen Dank für Antworten,<br />
Black Shadow</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233199</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Thu, 22 Feb 2007 12:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Thu, 22 Feb 2007 22:13:17 GMT]]></title><description><![CDATA[<p>Muahaha, klar stürzt WinAmp ab. WinAmp hat die DLL schliesslich geladen, und sich Funktionszeiger darauf gemerkt. Und was denkst du dir was passiert wenn WinAmp diese Funktionszeiger &quot;anspringt&quot;?<br />
Weiters wird WinAmp irgendwann hergehen und selbst ein FreeLibrary machen - was nicht gut kommt wenn die DLL schon freigegeben wurde.</p>
<p>Es sollte möglich sein eine kleie &quot;Stub DLL&quot; zu verwenden - was aber sicher auch nicht so ganz einfach werden wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233745</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 22 Feb 2007 22:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Fri, 23 Feb 2007 00:23:34 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Muahaha, klar stürzt WinAmp ab. WinAmp hat die DLL schliesslich geladen, und sich Funktionszeiger darauf gemerkt. Und was denkst du dir was passiert wenn WinAmp diese Funktionszeiger &quot;anspringt&quot;?</p>
</blockquote>
<p>was für Funktionszeiger? Winamp ruft lediglich zu beginn die _einzig_ exportierte Funktion &quot;winampGeneralPurposePlugin&quot; (in meinem Fall) auf. Diese wird nur beim Laden aufgerufen, danach lässt winamp mein plugin in ruhe... oder von welchen Funktionszeigern sprichst du?</p>
<p>Ein FreeLibrary auf ein ungültiges HMODULE-Handle halte ich jetzt nicht für schlimm ... wobei ich sogar denke dass Winamp beim Schließen (das meinst du doch oder?) eben kein FreeLibrary für jedes seiner Plugins aufruft, sondern dies schön Windows überlässt...</p>
<p>Was verstehst du unter Stub Dll?</p>
<p>Vielen Dank!</p>
<p>MfG,<br />
Black Shadow</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233793</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Fri, 23 Feb 2007 00:23:34 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Fri, 23 Feb 2007 23:09:13 GMT]]></title><description><![CDATA[<p>Also von General Purpose Plugin schreibst du erst jetzt was. Ich hatte erstmal an ein DSP Plugin gedacht oder vielleicht ein Input/Output Plugin.</p>
<p>Die Funktion heisst im übrigen &quot;winampGetGeneralPurposePlugin&quot; und nicht &quot;winampGeneralPurposePlugin&quot;, und liefert einen Zeiger auf eine Struktur zurück wo wiederum 3 Funktionszeiger drinnen sind (init, config, quit). Na sowas.</p>
<p>---</p>
<p>Was ich mit einer Stub DLL meine ... naja: eine Stub DLL halt <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="😃"
    /><br />
Eine kleine DLL die bloss eine andere DLL nachlädt die dann den eigentlichen Code enthält. Die Stub DLL wird nie entladen, aber die 2. DLL die den eigentlichen Code enthält kann entladen werden.</p>
<p>Glaub mir aber einfach wenn ich sage: lass es, es ist den Aufwand nicht wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234404</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Feb 2007 23:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Fri, 23 Feb 2007 23:20:44 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Die Funktion heisst im übrigen &quot;winampGetGeneralPurposePlugin&quot; und nicht &quot;winampGeneralPurposePlugin&quot;</p>
</blockquote>
<p>jo sicher, ich hatte es falsch im gedächtnis...</p>
<blockquote>
<p>und liefert einen Zeiger auf eine Struktur zurück wo wiederum 3 Funktionszeiger drinnen sind (init, config, quit). Na sowas.</p>
</blockquote>
<p>du tust so als würde das ein problem darstellen - jedoch wird lediglich init zu beginn aufgerufen, config/quit vom User, welcher eh beides nicht gleichzeitig machen kann (updaten und im plugin konfigurationsmenü rummachen). Ein quit kriege ich nicht wenn Winamp sich beendet. Ergo: Es gibt kein Szenario bei welchem diese Funktionen ein Problem darstellen. Na sowas. Aber jetzt ist mir klar was du mit stub dll meinst - ich werde es mal so angehen.</p>
<p>Thx!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234415</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Fri, 23 Feb 2007 23:20:44 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Fri, 23 Feb 2007 23:39:26 GMT]]></title><description><![CDATA[<p>Black Shadow schrieb:</p>
<blockquote>
<p>du tust so als würde das ein problem darstellen - jedoch wird lediglich init zu beginn aufgerufen, config/quit vom User, welcher eh beides nicht gleichzeitig machen kann (updaten und im plugin konfigurationsmenü rummachen)</p>
</blockquote>
<p>Jupp aber wenn sich die Adressen der Funktionszeiger ändern, eben durch das Update (das 'bekommt WinAmp ja nicht mit'), krackt es später bei diesen Calls. Aber das hat hustbaer eigentlich schon geschrieben <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/1234422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234422</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 23 Feb 2007 23:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Fri, 23 Feb 2007 23:59:52 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Jupp aber wenn sich die Adressen der Funktionszeiger ändern, eben durch das Update (das 'bekommt WinAmp ja nicht mit'), krackt es später bei diesen Calls. Aber das hat hustbaer eigentlich schon geschrieben <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>jup das stimmt, daran habe ich nicht gedacht.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234439</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Fri, 23 Feb 2007 23:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Sat, 24 Feb 2007 12:11:44 GMT]]></title><description><![CDATA[<p>Aber mir fällt gerade ein: Du könntest ja auch ein kleines Progrämmchen schreiben, das 1. WinAMP beendet, falls er läuft, 2. die Dll's kopiert und 3. WinAMP wieder startet.</p>
<p>Nur noch so als Idee, vllt. hilft Dir das ja <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234600</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sat, 24 Feb 2007 12:11:44 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Sat, 24 Feb 2007 12:20:59 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Aber mir fällt gerade ein: Du könntest ja auch ein kleines Progrämmchen schreiben, das 1. WinAMP beendet, falls er läuft, 2. die Dll's kopiert und 3. WinAMP wieder startet.</p>
<p>Nur noch so als Idee, vllt. hilft Dir das ja <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> .</p>
</blockquote>
<p>jojo, so hatte ich es auch ursprünglich vor, aber ich fand ein live-update ohne neustart schicker ^^.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234603</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Sat, 24 Feb 2007 12:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to [Verständnisfrage&#x2F;Design] Dll &amp;quot;on the fly&amp;quot; updaten on Sat, 24 Feb 2007 23:32:28 GMT]]></title><description><![CDATA[<p>Das Problem ist schlicht und einfach dass WinAmp sich den von winampGetGeneralPurposePlugi zurückgelieferten Zeiger auf diese Struktur (was auch immer da drinnen ist) merkt, und auch nach dem &quot;online update&quot; wieder darauf zugreifen wird. Bzw. es kann und darf. Annahmen darüber zu treffen wann WinAmp das tut oder nicht tut halte ich nicht für sinnvoll, da sich das bei jeder neuen WinAmp Version ändern kann.</p>
<p>WinAmp könnte z.B. auch (wenn es irgendwo Sinn macht - warum auch immer) einfach nur die Liste der geladenen Plugin DLLs durchgehen, und die Namen der Plugins angucken. Der Name steht nun aber auch in dieser Struktur die dann nach dem &quot;online update&quot; nichtmehr da ist -&gt; boom.</p>
<p>Wie du aber nun schon selbst erkannt hast sind das alles akademische Überlegungen solange du den Fall nicht handlen kannst dass der User irgendwann nach dem update auf &quot;Config&quot; klickt, und WinAmp dann versucht die nichtmehr vorhandene Config Funktion aufzurufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234931</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 24 Feb 2007 23:32:28 GMT</pubDate></item></channel></rss>