<?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[Grundverständnis Win32 DLL Messages]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Verständnisproblem mit DLLs, aus denen Windows messages heraus geschickt werden. Folgendes Szenario: Ich habe eine (Fremd-)DLL, die ich mit LoadLibrary() lade und einen Zeiger darauf benutze, um gewisse Funktionen aufzurufen. Die DLL schickt eine selbst generierte message WM_TAG die definiert ist als</p>
<pre><code>#define WM_TAG WM_USER + 11111
</code></pre>
<p>Dazu muss ich sagen, dass ich in Qt4 programmiere und die Win32-Funktionen nur zum Einbinden der DLL brauche. Wenn ich die DLL jetzt in meinem Qt-Hauptprogramm lade und in Qt mittels</p>
<pre><code>bool QWidget::winEvent(MSG* msg, long* result)
</code></pre>
<p>alle Windows messages abfange, bekomme ich auch die Message aus der DLL. So weit so gut.</p>
<p>Aber wenn ich versuche, die DLL von einer anderen (Qt-)DLL aus zu laden (die Qt-DLL definiert ei QWidget, das die entsprechende winEvent-Funktion überschreibt), bekomme ich die Message nicht mehr, d.h.</p>
<p>DLL --- Win-message ---&gt; Application: Funktioniert<br />
DLL --- Win-message ---&gt; DLL : Funktioniert nicht ??</p>
<p>Deshalb meine Frage: Wohin werden die Messages von DLLs geschickt, in meinem Win32-Buch steht, dass sie immer an das Hauptprogramm geschickt werden, welches die DLL geladen hat, aber was, wenn ich eine DLL durch eine andere DLL lade?</p>
<p>Danke für alle Hinweise,<br />
AlGaN</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223716/grundverständnis-win32-dll-messages</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 07:55:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223716.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Sep 2008 08:42:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Tue, 30 Sep 2008 08:42:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Verständnisproblem mit DLLs, aus denen Windows messages heraus geschickt werden. Folgendes Szenario: Ich habe eine (Fremd-)DLL, die ich mit LoadLibrary() lade und einen Zeiger darauf benutze, um gewisse Funktionen aufzurufen. Die DLL schickt eine selbst generierte message WM_TAG die definiert ist als</p>
<pre><code>#define WM_TAG WM_USER + 11111
</code></pre>
<p>Dazu muss ich sagen, dass ich in Qt4 programmiere und die Win32-Funktionen nur zum Einbinden der DLL brauche. Wenn ich die DLL jetzt in meinem Qt-Hauptprogramm lade und in Qt mittels</p>
<pre><code>bool QWidget::winEvent(MSG* msg, long* result)
</code></pre>
<p>alle Windows messages abfange, bekomme ich auch die Message aus der DLL. So weit so gut.</p>
<p>Aber wenn ich versuche, die DLL von einer anderen (Qt-)DLL aus zu laden (die Qt-DLL definiert ei QWidget, das die entsprechende winEvent-Funktion überschreibt), bekomme ich die Message nicht mehr, d.h.</p>
<p>DLL --- Win-message ---&gt; Application: Funktioniert<br />
DLL --- Win-message ---&gt; DLL : Funktioniert nicht ??</p>
<p>Deshalb meine Frage: Wohin werden die Messages von DLLs geschickt, in meinem Win32-Buch steht, dass sie immer an das Hauptprogramm geschickt werden, welches die DLL geladen hat, aber was, wenn ich eine DLL durch eine andere DLL lade?</p>
<p>Danke für alle Hinweise,<br />
AlGaN</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590726</guid><dc:creator><![CDATA[AlGaN]]></dc:creator><pubDate>Tue, 30 Sep 2008 08:42:58 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Tue, 30 Sep 2008 08:56:05 GMT]]></title><description><![CDATA[<p>an das hwnd, was du bei SendMessage angibst....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590732</guid><dc:creator><![CDATA[ascda]]></dc:creator><pubDate>Tue, 30 Sep 2008 08:56:05 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Tue, 30 Sep 2008 09:05:08 GMT]]></title><description><![CDATA[<p>Versuche es mal so:</p>
<p>DLL -- win message --&gt; application --&gt; win message --&gt; 2. DLL</p>
<p>Die Applikation sowie alle beteiligten DLLs haben jeweils eigene Fenster-Handles, über die sie miteinander kommunizieren können. Wenn der direkte Weg von DLL nach DLL nicht funktioniert, dann die Message über die Applikation durchreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590738</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Tue, 30 Sep 2008 09:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Tue, 30 Sep 2008 09:29:10 GMT]]></title><description><![CDATA[<p>@ascda: Ja, würde ich gerne, leider bin ich nicht im Besitz des Source-Codes der DLL, welche die Message schickt, weiß deshalb auch nicht, an welchen Handle die Message mit SendEvent() geschickt wird...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17339">@berniebutt</a>: Danke für die Antwort, werd den Umweg mal versuchen, ist nur etwas ungünstig, da mein Programm fast nur aus DLLs besteht, die Applikation macht nichts anderes als Objekte zu erzeugen, die in DLLs liegen... (weshalb ich auch die DLL aus einer DLL heraus lade)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590753</guid><dc:creator><![CDATA[AlGaN]]></dc:creator><pubDate>Tue, 30 Sep 2008 09:29:10 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Thu, 23 Oct 2008 07:54:10 GMT]]></title><description><![CDATA[<p>Es geht auch direkt von DLL nach DLL! Hierzu muss man für jede DLL einen moduslosen Dialog einrichten, dessen Fenster-Handles HWND über die Applikation (oder die steuernde DLL) den anderen DLLs mitgeteilt werden. daddeldu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603209</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 23 Oct 2008 07:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Thu, 23 Oct 2008 09:52:09 GMT]]></title><description><![CDATA[<p>DLLs haben nichts mit Nachrichten zu tun, nur Fenster!<br />
Wer dasFenster angelegt hat (ob DLL oder EXE) ist Windows egal.</p>
<p>Es gibt also so etwas wie &quot;Nachricht an DLL&quot; gar nicht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603283</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 23 Oct 2008 09:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Thu, 23 Oct 2008 13:41:30 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Es geht auch direkt von DLL nach DLL! Hierzu muss man für jede DLL einen moduslosen Dialog einrichten, dessen Fenster-Handles HWND über die Applikation (oder die steuernde DLL) den anderen DLLs mitgeteilt werden. daddeldu</p>
</blockquote>
<p>Wieso pushst du einen fertigen thread?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603436</guid><dc:creator><![CDATA[ascda]]></dc:creator><pubDate>Thu, 23 Oct 2008 13:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Thu, 23 Oct 2008 15:59:53 GMT]]></title><description><![CDATA[<p>@asda: Weil ich dem Fragesteller noch etwas mitteilen wollte, was er gesucht hatte.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a> Richter: Hier liegst Du falsch. DLLs können sehr wohl untereinander Nachrichten austauschen. Ich habe das ausprobiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603514</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 23 Oct 2008 15:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Thu, 23 Oct 2008 16:18:17 GMT]]></title><description><![CDATA[<p>LOL berniebutt ist ein ausgefuchster Provokateur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1603524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1603524</guid><dc:creator><![CDATA[ascda]]></dc:creator><pubDate>Thu, 23 Oct 2008 16:18:17 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Fri, 24 Oct 2008 07:20:50 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a> Richter: Hier liegst Du falsch. DLLs können sehr wohl untereinander Nachrichten austauschen. Ich habe das ausprobiert!</p>
</blockquote>
<p>Blödsinn! Keine DLLs tauschen hier Nachrichten aus, sondern Fenster!<br />
Oder es sind die Prozesse die die Nachrichten austauschen. Nicht die DLLs! Darauf will ich hinaus. DLLs sind Container für Code. Aber Nachrichten beziehen sich immer auf den Prozess, Thread und das Fenster. Wo der Code liegt (DLL,EXE) ist dem System egal.<br />
Es gibt keinerei Einschränkungen oder Besonderheiten wenn man Code in einer LDL hat und dieser SendMessage ausführt. Die Fragestellung ist also schon irreführend, falsch und eng!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604003</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 24 Oct 2008 07:20:50 GMT</pubDate></item><item><title><![CDATA[Reply to Grundverständnis Win32 DLL Messages on Thu, 13 Nov 2008 09:00:18 GMT]]></title><description><![CDATA[<p>@ asdca / Martin Richter: Ich bin weder ein ausgefuchster Provokateuer noch teile ich in diesem Forum allein Blödsinn mit.</p>
<p>Ich hatte vorgeschlagen, den DLLs einen moduslosen Dialog (hat ein Fenster-Handle) hinzuzufügen, dessen Dialog-Funktion gesendete Nachrichten entgegennimmt. Eine DLL bekommt so ein Gegenstück zu WndProc der Applikation. Damit war die Fragestellung des Themas beantwortet.</p>
<p>Dieser Dialog kann unsichtbar und völlig leer sein:<br />
DLLid DIALOG 0,0,0,0<br />
BEGIN<br />
END</p>
<p>Das ganze läuft so: die Applikation ruft als erste Anforderung eine DLL-Funktion DLLidInit(hwndApp,...) auf. DLLidInit richtet mit CreateDialog den moduslosen Dialog ein und teilt der Applikation dessen Fenster-Handle sowie ihre id mit: SendMessage(hwndApp,DLL_HWND,id,(LONG)hwndDLL). Die Applikation teilt dann genauso allen DLLs die Fenster-Handles der anderen DLLs mit. Das ist schon der gesamte notwendige Programmüberbau, der sich leicht standardisieren lässt. Dem direkten Senden von Nachrichten zwischen DLLs steht nichts mehr im Wege. Was die DLLs damit machen, bleibt im Ermessen der Aufgabenstellung.</p>
<p>Ich betrachte diesen Vorschlag als allgemein interessant, Man kann damit ein nützliches Werkzeug für die Software-Entwicklung und die Programmpflege schaffen. Ich habe das Funktionieren mit Testanwendungen ausreichend verifiziert.</p>
<p>Alles klar auf der Andrea Doria!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613889</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 13 Nov 2008 09:00:18 GMT</pubDate></item></channel></rss>