<?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[Subclassing problem]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine DLL die von einem Binärprogramm geladen wird - ich kenne sein Quellcode leider nicht. Das Programm ruft eine Funktion meiner DLL mit der HWND des Hauptfensters als Paramter.</p>
<p>Ich subklasse das Fenster und das Fenster beilbt subklassed bis die WM_DESTROY Message gesended wird. Dann wird die alte WNDPROC wieder zurückgestellt und so sollte es eigentlich klappen. Nun, das programm schließt sich, aber ganz am Ende (wenn das Fenster schon zestört ist - nicht mehr sichtbar ist) bekomme ich ein Fehler gemeldet - Access violation an einer Addresse wo meine DLL vorher geladen wahr.</p>
<p>Hier ist der Quellcode:</p>
<pre><code class="language-cpp">LRESULT CALLBACK DCCVoiceProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	hwndprocmap_t::const_iterator mypair = mHwndWndprocMap.find(hwnd);
	WNDPROC oldproc = NULL;

	if(mypair == mHwndWndprocMap.end()){
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	oldproc = mypair-&gt;second;

	if(uMsg == WM_DESTROY){
			SetWindowLongPtr(hwnd, GWLP_WNDPROC, PtrToLong(oldproc));
			mHwndWndprocMap.erase(hwnd);
			return CallWindowProc(oldproc, hwnd, uMsg, wParam, lParam);
	} else {
			return CallWindowProc(oldproc, hwnd, uMsg, wParam, lParam);
	}
}
</code></pre>
<p>Bitte, ich brauche dringend Hilfe!</p>
<p>Tschüss, erstmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/86015/subclassing-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 07:46:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/86015.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Sep 2004 20:26:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Subclassing problem on Tue, 14 Sep 2004 20:27:40 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine DLL die von einem Binärprogramm geladen wird - ich kenne sein Quellcode leider nicht. Das Programm ruft eine Funktion meiner DLL mit der HWND des Hauptfensters als Paramter.</p>
<p>Ich subklasse das Fenster und das Fenster beilbt subklassed bis die WM_DESTROY Message gesended wird. Dann wird die alte WNDPROC wieder zurückgestellt und so sollte es eigentlich klappen. Nun, das programm schließt sich, aber ganz am Ende (wenn das Fenster schon zestört ist - nicht mehr sichtbar ist) bekomme ich ein Fehler gemeldet - Access violation an einer Addresse wo meine DLL vorher geladen wahr.</p>
<p>Hier ist der Quellcode:</p>
<pre><code class="language-cpp">LRESULT CALLBACK DCCVoiceProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	hwndprocmap_t::const_iterator mypair = mHwndWndprocMap.find(hwnd);
	WNDPROC oldproc = NULL;

	if(mypair == mHwndWndprocMap.end()){
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	oldproc = mypair-&gt;second;

	if(uMsg == WM_DESTROY){
			SetWindowLongPtr(hwnd, GWLP_WNDPROC, PtrToLong(oldproc));
			mHwndWndprocMap.erase(hwnd);
			return CallWindowProc(oldproc, hwnd, uMsg, wParam, lParam);
	} else {
			return CallWindowProc(oldproc, hwnd, uMsg, wParam, lParam);
	}
}
</code></pre>
<p>Bitte, ich brauche dringend Hilfe!</p>
<p>Tschüss, erstmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607354</guid><dc:creator><![CDATA[Squeel]]></dc:creator><pubDate>Tue, 14 Sep 2004 20:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Subclassing problem on Tue, 14 Sep 2004 21:06:42 GMT]]></title><description><![CDATA[<p>Wo genau tritt denn der Fehler auf (Debugger) und warum setzt &quot;ent-subclasst&quot; du das Fenster überhaupt beim Zerstören?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607392</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Tue, 14 Sep 2004 21:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Subclassing problem on Tue, 14 Sep 2004 21:35:10 GMT]]></title><description><![CDATA[<p>Hi, Flenders!</p>
<p>Ich weiß leider nicht wie man eine DLL mit einem Debugger testet. Könntest du mir hiermit helfen? Ich habe <a href="http://VS.NET" rel="nofollow">VS.NET</a> (7.00).</p>
<p>Also, ich brauche dass das Fenster subklassed bleibt bis es nicht mehr funktional ist, deswegen kann ich nicht früher ent-subklassen.</p>
<p>Nun, der selbe Fehler passiert auch wenn ich überhaupt nicht ent-subklasse. Wenn ich aber irgendwo in der Mitte des Programms das DLL ablade (und ent-subklasse), passiert kein (sichtbarer) Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607404</guid><dc:creator><![CDATA[Squeel]]></dc:creator><pubDate>Tue, 14 Sep 2004 21:35:10 GMT</pubDate></item><item><title><![CDATA[Reply to Subclassing problem on Wed, 15 Sep 2004 07:04:32 GMT]]></title><description><![CDATA[<p>Squeel schrieb:</p>
<blockquote>
<p>Nun, der selbe Fehler passiert auch wenn ich überhaupt nicht ent-subklasse. Wenn ich aber irgendwo in der Mitte des Programms das DLL ablade (und ent-subklasse), passiert kein (sichtbarer) Fehler.</p>
</blockquote>
<p>Bist du dir denn sicher, dass der Fehler überhaupt mit dem oben geposteten Code zusammenhängt?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607514</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 15 Sep 2004 07:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to Subclassing problem on Wed, 15 Sep 2004 08:16:06 GMT]]></title><description><![CDATA[<p>flenders schrieb:</p>
<blockquote>
<p>Bist du dir denn sicher, dass der Fehler überhaupt mit dem oben geposteten Code zusammenhängt?!</p>
</blockquote>
<p>Nein, ich bin mir leider nicht sicher. Wie kann ich das testen? Könntest du mir bitte zeigen wie man den Debugger dafür nutzt?</p>
<p>Vorher habe ich gesagt, dass kein Fehler passiert, wenn ich die DLL vorzeitig entlade. Daher vermute ich, dass der Fehler beim Zerstören des Programms liegt (wo das DLL immernoch den Hauptfenster subklässt) - also, wenn die WM_DESTROY Meldung prozessiert wird.</p>
<p>Ich muß einen Weg finden, wie ich das DLL rechtzeitig entlade - bevor das Programm zestört ist.</p>
<p>Flenders, hast du schonmal Subklassen in dieser Wiese gemacht? Falls du es schon mal ausgeführt hast, könntest du mir bitte deine Methode erklären?</p>
<p>Vielen Dank für deine Mühe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607579</guid><dc:creator><![CDATA[Squeel]]></dc:creator><pubDate>Wed, 15 Sep 2004 08:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to Subclassing problem on Wed, 15 Sep 2004 08:32:45 GMT]]></title><description><![CDATA[<p>Habe leider in dieser Richtung noch nie etwas gemacht - aber prüfte auf jeden Fall mal oldproc, bevor du es mit CallWindowProc aufrufst <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/607593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607593</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 15 Sep 2004 08:32:45 GMT</pubDate></item></channel></rss>