<?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[Resource String aus statischer Methode]]></title><description><![CDATA[<p>Hallo.<br />
Habe ein kleines Problem mit Strings aus einer Resource-Datei (arbeite mit VS2005 und den MFC).<br />
Simples Beispiel:</p>
<pre><code class="language-cpp">// ...
CString strMessage;
strMessage.Format(IDS_ERR_INIT, ulInitReturn);
AfxMessageBox(strMessage, MB_ICONERROR);
</code></pre>
<p>In einer normalen Klassenmethode klappt das auch. Aber in einer statischen Methode wirft mir die MFC eine Handvoll asserts und die MessageBox bleibt leer. Auch mit</p>
<pre><code class="language-cpp">strMessage.LoadString(IDS_ERR_INIT)
</code></pre>
<p>hatte ich nicht mehr Erfolg.<br />
Aus einem der Asserts war ersichtlich, dass der ResourceHandle NULL ist.<br />
Das könnte ja auch Sinn machen (zumindest klingt es plausibel, dass die Resourcen in statischen Mehtoden nicht direkt verfügbar sind).<br />
Nun die Preisfrage an alle Pros hier:<br />
Wie komme ich aus einer statischen Mehtode an die ResourceStrings ran?????<br />
Danke &amp; Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198964/resource-string-aus-statischer-methode</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 18:36:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198964.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Nov 2007 15:05:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Resource String aus statischer Methode on Tue, 27 Nov 2007 15:05:23 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Habe ein kleines Problem mit Strings aus einer Resource-Datei (arbeite mit VS2005 und den MFC).<br />
Simples Beispiel:</p>
<pre><code class="language-cpp">// ...
CString strMessage;
strMessage.Format(IDS_ERR_INIT, ulInitReturn);
AfxMessageBox(strMessage, MB_ICONERROR);
</code></pre>
<p>In einer normalen Klassenmethode klappt das auch. Aber in einer statischen Methode wirft mir die MFC eine Handvoll asserts und die MessageBox bleibt leer. Auch mit</p>
<pre><code class="language-cpp">strMessage.LoadString(IDS_ERR_INIT)
</code></pre>
<p>hatte ich nicht mehr Erfolg.<br />
Aus einem der Asserts war ersichtlich, dass der ResourceHandle NULL ist.<br />
Das könnte ja auch Sinn machen (zumindest klingt es plausibel, dass die Resourcen in statischen Mehtoden nicht direkt verfügbar sind).<br />
Nun die Preisfrage an alle Pros hier:<br />
Wie komme ich aus einer statischen Mehtode an die ResourceStrings ran?????<br />
Danke &amp; Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411079</guid><dc:creator><![CDATA[User123]]></dc:creator><pubDate>Tue, 27 Nov 2007 15:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Tue, 27 Nov 2007 15:20:52 GMT]]></title><description><![CDATA[<p>es sieht fuer mich aus dem Bisschen was du hier preisgibst so aus, als ob das Problem bei den globalen bzw. statischen Variablen liegt: Es ist nicht festgelegt in welcher Reihenfolge die angelegt werden, deshalb kann es immer mal passieren, dass man versucht auf Objekte zuzugreifen, die noch nicht oder nicht mehr existieren, wenn sie voneinander abhaengig sind. Es gibt verschiedene Ansaetze, solche Probleme zu loesen, google mal ein bisschen rum (unter anderem globale Variablen vermeiden bzw. in singletons zusammenfassen, z.B. das phoenix-singleton von Alexandrescu)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411089</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 27 Nov 2007 15:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Tue, 27 Nov 2007 16:11:34 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-1.html" rel="nofollow">MFC (Visual C++)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411119</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Tue, 27 Nov 2007 16:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Tue, 27 Nov 2007 21:00:06 GMT]]></title><description><![CDATA[<p>Das hat nichts mit statischen Fuktionen zu tun.<br />
LoadString ist eine Funktion, die auf einen String-Manager zurückgreift. Dieser muss initialisiert sein.</p>
<p>Wenn Du einfach die MFC verwendest ohne die durch ein CWinAp bzw. AfxWinInit (o.ä) zu initialisieren, dann hat der String Manager kein Ressource Handle und schmeißt einen ASSERT...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411266</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 27 Nov 2007 21:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Tue, 27 Nov 2007 21:28:05 GMT]]></title><description><![CDATA[<p>Danke schon mal für eure Antworten (sorry übrigens für das fehlplatzierte Posting - hab extra nach MFC geschaut - muss wohl etwas blind gewesen sein...).</p>
<blockquote>
<p>...als ob das Problem bei den globalen bzw. statischen Variablen liegt...</p>
</blockquote>
<p>Die betroffenen Variablen sind allesamt lokal <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>Wenn Du einfach die MFC verwendest ohne die durch ein CWinAp bzw. AfxWinInit (o.ä) zu initialisieren, dann hat der String Manager kein Ressource Handle und schmeißt einen ASSERT...</p>
</blockquote>
<p>Jetzt verwirrst du mich. <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="🙄"
    /><br />
Also ich habe ja noch ein wenig Probiert: Ich habe an meiner Klasse (abgeleitet von CWinApp - zur DLL kompiliert) nichts weiter geändert, außer eben eine Funktion als statisch zu deklarieren.<br />
Hier mal etwas Hintergrundinformationen (vieleicht klärt sich dann einiges):<br />
Es handelt sich um eine DLL, welche einen Thread für eine größere Applikation enthält und erst zur Laufzeit zur eigentlichen Applikation gelinkt wird (also LoadLibrary/GetProcAdress).<br />
Wie bekannt, wird nach dem Laden der Bibliothek InitInstance vom CWinApp aufgerufen - dort behandel ich auch schon mal den Großteil der Initialisierung. Hier funktioniert im Fehlerfall auch das Ausgeben einer MessageBox (bzw laden des Strings) problemlos.<br />
Danach wird durch die Hauptapplikation über GetProcAdress die Startroutine aufgerufen, welche den eigentlichen Thread startet. Die Methode, die den Thread repräsentiert ist logischerweise statisch (wie eigentlich die gesammte Klasse...).<br />
In eben diesen statischen Funktionen habe ich es noch nicht geschafft, einen String aus der Resource Tabelle zu laden...</p>
<p>Für jede Hilfe dankbar <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/1411285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411285</guid><dc:creator><![CDATA[User123]]></dc:creator><pubDate>Tue, 27 Nov 2007 21:28:05 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Wed, 28 Nov 2007 07:07:36 GMT]]></title><description><![CDATA[<p>Ok dann ist alles klar.<br />
Du hast</p>
<pre><code class="language-cpp">AFX_MANAGE_STATE(AfxGetStaticModuleState());
</code></pre>
<p>nicht eingebaut...</p>
<p>Lies mal TN058 <a href="http://msdn2.microsoft.com/en-US/library/ft1t4bbc(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-US/library/ft1t4bbc(VS.80).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411372</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 28 Nov 2007 07:07:36 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Thu, 29 Nov 2007 10:08:27 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Danke - das klingt doch sehr vielversprechend. Werde es bei nächster Gelegenheit testen.</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412093</guid><dc:creator><![CDATA[User123]]></dc:creator><pubDate>Thu, 29 Nov 2007 10:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Fri, 30 Nov 2007 13:11:11 GMT]]></title><description><![CDATA[<p>Jau - scheint zu funktionieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Obwohl ich zugeben muss, den MS Artikel nicht wirklich verstanden zu haben (liegt vieleicht daran, dass ich mich auch nie so ganz mit den MFC anfreunden konnte). <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=":confused:"
      alt="😕"
    /><br />
Wäre schön, wenn du den Hintergrund des Makros einmal kurz umreißen könntest -denn eigentlich baue ich ungerne Codezeilen ein, die ich selber nicht begründen kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412905</guid><dc:creator><![CDATA[User123]]></dc:creator><pubDate>Fri, 30 Nov 2007 13:11:11 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Fri, 30 Nov 2007 14:33:48 GMT]]></title><description><![CDATA[<p>Das ganze ist ziemlich einfach.<br />
Wenn Du die MFC als shared DLL verwendest, dann gibt es eine globale Variable in der MFC DLL, die einen Zeiger auf die aktuelle Instanz des Programmes angibt.<br />
In diesen Instanzdaten, steht auch wo die Ressourcen zu laden sind.</p>
<p>Nun baust Du eine neue DLL, diese hat nun auch ein CWinApp Objekt. Die Ressourcen werden aber immer über den globalen Zeiger in der MFC DLL gesucht.<br />
AFX_MANAGE_STATE tauscht nun für die Zeit Deines DLL Aufrufes diesen globalen Zeiger der Applikation aus mit einem Zeiger aus Deiner DLL-Instanz. Nun kann Deine DLL seine Ressourcen laden. Am Ende der Funktion wird der Zeiger wieder zurückgesetzt und alles ist wie zuvor.</p>
<p>Hättest Du die MFC statisch gelinkt, hättest Du das Problem nicht gehabt.</p>
<p>HTH</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412971</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 30 Nov 2007 14:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Resource String aus statischer Methode on Mon, 03 Dec 2007 16:52:40 GMT]]></title><description><![CDATA[<p>Ahhh so schauts aus... Jetzt is alles klar!</p>
<p>Supi - wieder was dazu gelernt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke Dir für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414353</guid><dc:creator><![CDATA[User123]]></dc:creator><pubDate>Mon, 03 Dec 2007 16:52:40 GMT</pubDate></item></channel></rss>