<?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[&#x27;CreateWindowA&#x27; Macro]]></title><description><![CDATA[<p>Hallihallo,</p>
<p>kurze Frage zu folgendem Code:</p>
<pre><code class="language-cpp">// Irgendein Header-File
typedef struct
     {
     // [...]
     }S_PARAMS;

class C_MYGUI
     {
     // [...]
     public:
          int CreateWindow(S_PARAMS Params);

     // ctor, dtor...
     }
</code></pre>
<p>Im Laufe der Includes wird vor der obigen Header die &lt;windows.h&gt; geladen.</p>
<p>Wenn ich meinen Code nun compile (ich nutze Eclipse mit Cygwin unter Windows, aber das dürfte unabhänging davon sein), dann meckert mir der GCC an, dass das Makro 'CreateWindow' für CreateWindowA() falsch verwendet wird. Da es sich eben um ein Makro irgendwo in der &lt;windows.h&gt; handelt, interessiert ihn mein Scope der Klasse natürlich wenig.</p>
<p>Die Frage die ich nun habe: Ist es gefährlich das Makro mit</p>
<pre><code class="language-cpp">#ifdef CreateWindow
     #undef CreateWindow
#endif
</code></pre>
<p>zurückzusetzen? Der Code ist zwar dann compilebar, aber ich weiß nicht, ob das irgendwelche Seiteneffekte nach sich zieht. Falls jemand eine Möglichkeit kennt das auch anders zu lösen, hätte ich auch kein Problem damit <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>Im Zweifelsfall benenne ich eben die Methode um... Danke schonmal für etwaige Hilfen.</p>
<p>Gruß,<br />
PuerNoctis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224780/createwindowa-macro</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 16:56:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224780.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Oct 2008 06:01:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 06:01:09 GMT]]></title><description><![CDATA[<p>Hallihallo,</p>
<p>kurze Frage zu folgendem Code:</p>
<pre><code class="language-cpp">// Irgendein Header-File
typedef struct
     {
     // [...]
     }S_PARAMS;

class C_MYGUI
     {
     // [...]
     public:
          int CreateWindow(S_PARAMS Params);

     // ctor, dtor...
     }
</code></pre>
<p>Im Laufe der Includes wird vor der obigen Header die &lt;windows.h&gt; geladen.</p>
<p>Wenn ich meinen Code nun compile (ich nutze Eclipse mit Cygwin unter Windows, aber das dürfte unabhänging davon sein), dann meckert mir der GCC an, dass das Makro 'CreateWindow' für CreateWindowA() falsch verwendet wird. Da es sich eben um ein Makro irgendwo in der &lt;windows.h&gt; handelt, interessiert ihn mein Scope der Klasse natürlich wenig.</p>
<p>Die Frage die ich nun habe: Ist es gefährlich das Makro mit</p>
<pre><code class="language-cpp">#ifdef CreateWindow
     #undef CreateWindow
#endif
</code></pre>
<p>zurückzusetzen? Der Code ist zwar dann compilebar, aber ich weiß nicht, ob das irgendwelche Seiteneffekte nach sich zieht. Falls jemand eine Möglichkeit kennt das auch anders zu lösen, hätte ich auch kein Problem damit <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>Im Zweifelsfall benenne ich eben die Methode um... Danke schonmal für etwaige Hilfen.</p>
<p>Gruß,<br />
PuerNoctis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599091</guid><dc:creator><![CDATA[PuerNoctis]]></dc:creator><pubDate>Wed, 15 Oct 2008 06:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 06:15:38 GMT]]></title><description><![CDATA[<p>Nach meiner Ansicht sollte vermieden werden, Namen aus dem PSDK oder sonst wo her für die eigenen Funktionen zu verwenden. In anderen Fällen könnte man wohl mit Namespaces arbeiten, aber in diesem Fall ist CreateWindow ein Präprozessor-define, so dass deine CreateWindow's eben durch CreateWindowA oder CreateWindoW ersetzt werden sollen. Das wird durch namespaces natürlich nicht abgefangen. Sehr ungünstig...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599096</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 15 Oct 2008 06:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 06:22:56 GMT]]></title><description><![CDATA[<p>Hm, hab' ich mir schon fast gedacht, dass davon abgeraten wird diesselben Namen zu verwenden.... Ich geh' jetzt einfach auf Nummer sicher und lass die Defines von Microsoft in Ruhe und benenne meine Methoden um.</p>
<p>Falls jemand noch ne Anmerkung dazu hat, einfach schreiben.</p>
<p>Btw.: Ich verwende sogar Namespaces, aber klar, das kratzt den Präprozesser nicht die Bohne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599100</guid><dc:creator><![CDATA[PuerNoctis]]></dc:creator><pubDate>Wed, 15 Oct 2008 06:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 06:27:38 GMT]]></title><description><![CDATA[<p>Ganz verstehe ich Dein Problem nicht.<br />
Es gibt in den Windows Headern einige Makros die bestimmte Namen in eine A oder W Variante umdefinieren. Wenn das aber konsequent gemacht wird spielt es keine Rolle. Denn alle Vorkommnisse dieses Namens werden geändert.<br />
Problematisch wäre es nur im Exportieren der Funktion in einer DLL.</p>
<p>Wenn man also eine Methode CreateWindow nennt, wird am ende eben CreateWindowA oder CreateWindowW daraus, aber eben überall im Programm soweit man eben die Windows Header immer nutzt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599104</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 15 Oct 2008 06:27:38 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 06:50:26 GMT]]></title><description><![CDATA[<p>Ich versuche das Problem etwas genauer zu erläutern:</p>
<p>Microsoft definiert in meiner 'winuser.h' folgendes:</p>
<pre><code class="language-cpp">#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
//[...]
#ifdef UNICODE
#define CreateWindow  CreateWindowW
#else
#define CreateWindow  CreateWindowA
#endif // !UNICODE
</code></pre>
<p>Der Define für 'CreateWindow' verweist folglich (kein UNICODE gesetzt) auf das Makro 'CreateWindowA'. Logischerweise wird jedes 'CreateWindow' in meinem Code durch eben dieses Makro ersetzt.</p>
<p>Nun habe ich aber eine Methode in meiner Klasse, die zufälligerweise 'CreateWindow' heißt. Durch diese Defines wird meine eigene Methode zu einer WinAPI-Funktion umgeleitet &lt;- und DAS ist das Problem <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>EDIT: Da ich die &lt;windows.h&gt; allerdings brauche, komme ich nicht drum herum, dass die obigen Defines irgendwann gesetzt werden. Ich hab' mit den Dingern rein garnichts zu tun...</p>
<p>Mein Lösungsansatz war nun, vor meiner Klasse das Define 'CreateWindow' mit #undef zurückzusetzen, nur ich bin mir nicht sicher, ob ich irgendwann nach weiterer Implementierung in Probleme laufen könnte. Hoffe das Problem ist jetzt etwas konkreter veranschaulicht.</p>
<p>Ich werde höchstwahrscheinlich meine Methoden umbennen um dem zu entgehen. Danke für Eure Antworten <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1599115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599115</guid><dc:creator><![CDATA[PuerNoctis]]></dc:creator><pubDate>Wed, 15 Oct 2008 06:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 07:10:41 GMT]]></title><description><![CDATA[<p>PuerNoctis schrieb:</p>
<blockquote>
<p>Nun habe ich aber eine Methode in meiner Klasse, die zufälligerweise 'CreateWindow' heißt. Durch diese Defines wird meine eigene Methode zu einer WinAPI-Funktion umgeleitet &lt;- und DAS ist das Problem <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>Nein, das ist erst einmal kein Problem. Da wird nichts umgeleitet.<br />
Ein Problem hast du erst, wenn diese Übersetzung nicht <em>überall</em> passiert, weil du irgendwo &lt;windows.h&gt; nicht einbindest, oder wenn die Ersetzung nicht überall gleich ist, weil du mal UNICODE definiert hast und mal nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599121</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 15 Oct 2008 07:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 08:48:05 GMT]]></title><description><![CDATA[<p>100% ACK zu dem was MFK schreibt. Das wollte ich mit meinem Posting auch schon sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599189</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 15 Oct 2008 08:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to &#x27;CreateWindowA&#x27; Macro on Wed, 15 Oct 2008 09:36:53 GMT]]></title><description><![CDATA[<p>Alles klar, danke für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599209</guid><dc:creator><![CDATA[PuerNoctis@Offline]]></dc:creator><pubDate>Wed, 15 Oct 2008 09:36:53 GMT</pubDate></item></channel></rss>