<?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[Problem mit DLL &amp;amp; gemeinsamen Variablen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab anscheinend irgendwie ein Verständnisproblem was DLLs angeht.<br />
Genauergesagt habe ich einen KeyboardHook (ja wurde hier schon oft diskutiert).<br />
In dieser DLL habe ich den Buffer, der die Zeichen aufnimmt in</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;Shared&quot;)
   static char			Buffer[512] = {0};
   HWND				hOldForeGroundWin;
#pragma data_seg () 
#pragma comment (linker, &quot;/section:Shared,RWS&quot;)
</code></pre>
<p>definiert.<br />
Der Buffer wird dann wenn er eine best. Länge erreicht hat geschrieben. Es tauchen auch alle Zeichen aus unterschiedlichen Fenstern drin auf, kein Problem.<br />
Nun möchte ich aber noch das Fenster loggen, in welchem der Text eingegeben wird. Deswegen habe ich zusätzlich noch ein HWND im gemeinsamen Bereich angelegt, welches das gerade aktuelle Vordergrundfenster speichen soll.<br />
In der Callback Funktion wird nun ein <strong>lokaler</strong></p>
<pre><code class="language-cpp">HWND hForeGroundWin = NULL;
hForeGroundWin = GetForegroundWindow();
</code></pre>
<p>angelegt und mit dem gemeinsamen WindowHandle verglichen</p>
<pre><code class="language-cpp">if (hForeGroundWin != hOldForeGroundWin)
{
    hOldForeGroundWin = hForeGroundWin;	
    //...
}
</code></pre>
<p>So möchte ich quasi eine Änderung des Fensters &quot;mitbekommen&quot;.<br />
Komischerweise funktioniert das nur <strong>einmal</strong>.<br />
Ich verstehe das nich! Mir kommt das so vor, als legt jede DLL ihr<br />
eigenes hOldForeGroundWin an und der Vergleich funktioniert beim ersten mal nur, weil hOldForeGroundWin da noch NULL ist.<br />
Aber es ist doch als shared deklariert???<br />
Mit dem Buffer funktioniert das ganze doch auch????</p>
<p>wär cool wenn mal jemand helfen könnte</p>
<p>ciao rene</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/72254/problem-mit-dll-amp-gemeinsamen-variablen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 23:26:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/72254.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Apr 2004 19:25:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit DLL &amp;amp; gemeinsamen Variablen on Mon, 26 Apr 2004 19:25:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab anscheinend irgendwie ein Verständnisproblem was DLLs angeht.<br />
Genauergesagt habe ich einen KeyboardHook (ja wurde hier schon oft diskutiert).<br />
In dieser DLL habe ich den Buffer, der die Zeichen aufnimmt in</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;Shared&quot;)
   static char			Buffer[512] = {0};
   HWND				hOldForeGroundWin;
#pragma data_seg () 
#pragma comment (linker, &quot;/section:Shared,RWS&quot;)
</code></pre>
<p>definiert.<br />
Der Buffer wird dann wenn er eine best. Länge erreicht hat geschrieben. Es tauchen auch alle Zeichen aus unterschiedlichen Fenstern drin auf, kein Problem.<br />
Nun möchte ich aber noch das Fenster loggen, in welchem der Text eingegeben wird. Deswegen habe ich zusätzlich noch ein HWND im gemeinsamen Bereich angelegt, welches das gerade aktuelle Vordergrundfenster speichen soll.<br />
In der Callback Funktion wird nun ein <strong>lokaler</strong></p>
<pre><code class="language-cpp">HWND hForeGroundWin = NULL;
hForeGroundWin = GetForegroundWindow();
</code></pre>
<p>angelegt und mit dem gemeinsamen WindowHandle verglichen</p>
<pre><code class="language-cpp">if (hForeGroundWin != hOldForeGroundWin)
{
    hOldForeGroundWin = hForeGroundWin;	
    //...
}
</code></pre>
<p>So möchte ich quasi eine Änderung des Fensters &quot;mitbekommen&quot;.<br />
Komischerweise funktioniert das nur <strong>einmal</strong>.<br />
Ich verstehe das nich! Mir kommt das so vor, als legt jede DLL ihr<br />
eigenes hOldForeGroundWin an und der Vergleich funktioniert beim ersten mal nur, weil hOldForeGroundWin da noch NULL ist.<br />
Aber es ist doch als shared deklariert???<br />
Mit dem Buffer funktioniert das ganze doch auch????</p>
<p>wär cool wenn mal jemand helfen könnte</p>
<p>ciao rene</p>
]]></description><link>https://www.c-plusplus.net/forum/post/509422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/509422</guid><dc:creator><![CDATA[ratio_rene]]></dc:creator><pubDate>Mon, 26 Apr 2004 19:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit DLL &amp;amp; gemeinsamen Variablen on Mon, 26 Apr 2004 19:50:04 GMT]]></title><description><![CDATA[<p>Hast du dir die Handles mal ausgeben lassen, damit du siehst, ob sie auch korrekte Werte beinhalten. Evtl. Handle mal überprüfen <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/509440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/509440</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Mon, 26 Apr 2004 19:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit DLL &amp;amp; gemeinsamen Variablen on Mon, 26 Apr 2004 21:32:32 GMT]]></title><description><![CDATA[<p>davon geh ich mal aus. ich hole mir über</p>
<p>GetWindowText(hForeGroundWin,WinText,100);</p>
<p>dann ja die fensterbeschreibung, funzt. der Handle sollte also ok sein.<br />
Also ich hab dafür irgendwie echt keine Erklärung. <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="😕"
    /></p>
<p>rene</p>
]]></description><link>https://www.c-plusplus.net/forum/post/509503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/509503</guid><dc:creator><![CDATA[ratio_rene]]></dc:creator><pubDate>Mon, 26 Apr 2004 21:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit DLL &amp;amp; gemeinsamen Variablen on Mon, 26 Apr 2004 21:49:52 GMT]]></title><description><![CDATA[<p>also es ist tatsächlich so, dass jede DLL ihren eigenen hOldForegroundWin speichert.</p>
<p>Habe mir mal mit</p>
<pre><code class="language-cpp">HWND hForeGroundWin = NULL;
		hForeGroundWin = GetForegroundWindow();
		char WinTextR[100];
		GetWindowText(hForeGroundWin,WinTextR,100);
		MessageBox(NULL,WinTextR,&quot;&quot;,MB_OK);
		_strset(WinTextR,0);
		GetWindowText(hOldForeGroundWin,WinTextR,100);
		MessageBox(NULL,WinTextR,&quot;&quot;,MB_OK);
</code></pre>
<p>die Texte ausgeben lassen. Beim ersten mal, ist hOldForegroundWin NULL, beim zweiten mal ist es in jedem Fenster, das Fenster selbst.<br />
Die Variable wird also nicht geshared.<br />
Wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/509509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/509509</guid><dc:creator><![CDATA[ratio_rene]]></dc:creator><pubDate>Mon, 26 Apr 2004 21:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit DLL &amp;amp; gemeinsamen Variablen on Mon, 26 Apr 2004 22:17:33 GMT]]></title><description><![CDATA[<p>geht nicht:</p>
<pre><code class="language-cpp">static HWND			hOldForeGroundWin;
</code></pre>
<p>geht:</p>
<pre><code class="language-cpp">static HWND			hOldForeGroundWin=NULL;
</code></pre>
<p>**<br />
MAN MERKE:<br />
**<br />
Variablen in einem gemeinsam benutztem Bereich einer DLL <em><strong>IMMER</strong></em> korrekt initialisieren.</p>
<p>Man! da muss man ma drauf kommen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/509517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/509517</guid><dc:creator><![CDATA[ratio_rene]]></dc:creator><pubDate>Mon, 26 Apr 2004 22:17:33 GMT</pubDate></item></channel></rss>