<?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[Crash durch code, der nicht verwendet wird]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe hier einen seltsamen Effekt, für den ich keinerlei Erklärung habe - deswegen wäre jeder auch noch so absurde Hinweis oder Tipp willkommen!</p>
<p>Ich habe ein Programm, welches gegen zwei Bibliotheken liba.dll und libb.dll linkt. Wenn ich nur einen Aufruf</p>
<pre><code>liba_init()
</code></pre>
<p>drin habe, dann funktioniert alles. Ich vermute mal, in diesem Fall wird gar nicht erst gegen die nicht benutze libb.dll gelinkt. Nehme ich jetzt einen Aufruf an die libb.dll hinzu:</p>
<pre><code>liba_init()
libb_init()
</code></pre>
<p>...dann stürzt mir mein Programm an einer ganz anderen Stelle ab - allerding schon im Aufruf von liba_init()! Um das klar zu stellen: liba_init() schmiert ab, wenn libb_init() im Programm vorkommt, aber ohne dass libb_init() zu diesem Zeitpunkt überhaupt schon mal aufgerufen wurde (und dabei hätte Schaden anrichten können).</p>
<p>Das einzige, was mir momentan auffällt, ist die Tatsache, dass libb_init() variable Parameterlisten verwendet:</p>
<pre><code>__declspec(dllexport) unsigned long __cdecl libb_init_if(int *var,...)
</code></pre>
<p>Die libb.dll wird bereits mit __cdel-Konvention gebaut (auch in den Codesettings des VS). Und: das Problem tritt nur unter Windows auf, unter Linux läuft der gleiche Code komplett problemlos.</p>
<p>Hat jemand einen Tipp oder eine Idee, was das sein könnte?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337576/crash-durch-code-der-nicht-verwendet-wird</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 23:24:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337576.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Apr 2016 06:15:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 06:15:11 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe hier einen seltsamen Effekt, für den ich keinerlei Erklärung habe - deswegen wäre jeder auch noch so absurde Hinweis oder Tipp willkommen!</p>
<p>Ich habe ein Programm, welches gegen zwei Bibliotheken liba.dll und libb.dll linkt. Wenn ich nur einen Aufruf</p>
<pre><code>liba_init()
</code></pre>
<p>drin habe, dann funktioniert alles. Ich vermute mal, in diesem Fall wird gar nicht erst gegen die nicht benutze libb.dll gelinkt. Nehme ich jetzt einen Aufruf an die libb.dll hinzu:</p>
<pre><code>liba_init()
libb_init()
</code></pre>
<p>...dann stürzt mir mein Programm an einer ganz anderen Stelle ab - allerding schon im Aufruf von liba_init()! Um das klar zu stellen: liba_init() schmiert ab, wenn libb_init() im Programm vorkommt, aber ohne dass libb_init() zu diesem Zeitpunkt überhaupt schon mal aufgerufen wurde (und dabei hätte Schaden anrichten können).</p>
<p>Das einzige, was mir momentan auffällt, ist die Tatsache, dass libb_init() variable Parameterlisten verwendet:</p>
<pre><code>__declspec(dllexport) unsigned long __cdecl libb_init_if(int *var,...)
</code></pre>
<p>Die libb.dll wird bereits mit __cdel-Konvention gebaut (auch in den Codesettings des VS). Und: das Problem tritt nur unter Windows auf, unter Linux läuft der gleiche Code komplett problemlos.</p>
<p>Hat jemand einen Tipp oder eine Idee, was das sein könnte?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2492935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492935</guid><dc:creator><![CDATA[Zonggg]]></dc:creator><pubDate>Tue, 12 Apr 2016 06:15:11 GMT</pubDate></item><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 06:26:29 GMT]]></title><description><![CDATA[<p>- Programm/Libs nicht mit dem gleichen Compiler und den gleichen Flags übersetzt<br />
- Symbole mit gleichem Namen in den Dlls</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2492936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492936</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 12 Apr 2016 06:26:29 GMT</pubDate></item><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 09:49:57 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>- Programm/Libs nicht mit dem gleichen Compiler und den gleichen Flags übersetzt</p>
</blockquote>
<p>Würde das nicht erst beim Aufruf der libb-Funktionen zu Problemen führen?</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>- Symbole mit gleichem Namen in den Dlls</p>
</blockquote>
<p>Die Namen passen, in so einem Fall sollte aber auch der Linker warnen bzw. einen Fehler ausgeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2492949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492949</guid><dc:creator><![CDATA[Zonggg]]></dc:creator><pubDate>Tue, 12 Apr 2016 09:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 10:08:17 GMT]]></title><description><![CDATA[<p>Könnte sein dass die <code>DllMain</code> Funktion der Library B das Problem verursacht. Die wird nämlich ausgeführt sobald die DLL geladen wird, nicht erst wenn man wirklich ne Funktion aufruft.<br />
Überprüf mal ob die Library B ohne den init Aufruf noch referenziert wird (=&gt; Dependency Walker).</p>
<p>Sonst kannst du noch probieren das Linken mit der DLL zu erzwingen ohne dass du die Init-Funktion dann wirklich aufrufst.<br />
Einfache Möglichkeit:</p>
<pre><code class="language-cpp">if (GetTickCount() == 0) // Wird so-gut-wie nie erfüllt sein
    libb_init();
</code></pre>
<p>Wenn das so dann nicht crasht, dann würde ich mal z.B. per Debug-Ausgaben sicherstellen dass der Crash nicht ganz woanders passiert als vermutet (gibt Situationen wo der Callstack im Debugger nicht stimmt, auch wenn das recht selten ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2492952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492952</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 12 Apr 2016 10:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 13:58:37 GMT]]></title><description><![CDATA[<p>So, ich habe noch ein paar Infos:</p>
<p>weder liba.dll noch libb.dll verwenden eine DLLMain, daher kann es also nicht kommen. Beide DLLs verwenden intern aber wxWidgets, allerdings mit einem großen Unterschied:</p>
<p>- liba.dll verwendet nur ganz wenige Funktionen von wxWidgets<br />
- libb.dll ist eine ausgewachsene Software, welche wxWidgets intensiv benutzt</p>
<p>Meine Idee jetzt: eventuell wird da irgendwo ein statisches wxWidgets-Objekt erzeugt, bevor liba.dll oder libb.dll wxwidgets ordnungsgemäß initialisieren könnten. Gefunden jabe ich aber noch keinne Schuldigen dafür <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2492968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492968</guid><dc:creator><![CDATA[Zonggg]]></dc:creator><pubDate>Tue, 12 Apr 2016 13:58:37 GMT</pubDate></item><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 15:08:20 GMT]]></title><description><![CDATA[<p>Ohne wxwidgets jetzt zu kennen - ist es eventuell ein Problem, wenn wxwidgets 2x initialisiert wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2492979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492979</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Tue, 12 Apr 2016 15:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Crash durch code, der nicht verwendet wird on Tue, 12 Apr 2016 21:21:35 GMT]]></title><description><![CDATA[<p>Zonggg schrieb:</p>
<blockquote>
<p>weder liba.dll noch libb.dll verwenden eine DLLMain</p>
</blockquote>
<p>Och die haben ziemlich sicher ne <code>DllMain</code> , bloss halt keine &quot;selbst geschriebene&quot;.</p>
<p>Weil: Jede DLL die statische Objekte hat welche dynamisch initialisiert werden müssen hat automatisch ne <code>DllMain</code> .<br />
Und alles wo das nicht zutrifft hat trotzdem immer noch ne <code>DllMain</code> , bloss u.U. eine die recht wenig tut <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/2493018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493018</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 12 Apr 2016 21:21:35 GMT</pubDate></item></channel></rss>