<?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[Klassenfunktionspointer als Callback an UnRAR-DLL übergeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Funktionsdeklarationen:</p>
<pre><code class="language-cpp">typedef int (CALLBACK *UNRARCALLBACK)(UINT msg, LONG UserData, LONG P1, LONG P2);
void   PASCAL RARSetCallback(HANDLE hArcData, UNRARCALLBACK Callback, LONG UserData);
</code></pre>
<p>Nun möchte ich der Callback-Funktion den Funktionspointer einer nicht statischen Klassenfunktion zuweisen, aber so, wie im folgenden Versuch geht es nicht:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
int CALLBACK URAR::UnRAREvent(UINT msg, LONG UserData, LONG P1, LONG P2)
{
	//
}

//---------------------------------------------------------------------------
void __fastcall URAR::SetCallbackFunction(HANDLE hArcData, LONG UserData)
{
	RARSetCallback(hArcData, UnRAREvent, UserData);
}
</code></pre>
<p>Dies wird natürlich mit folgender Fehlermeldung vom Compiler verweigert:</p>
<pre><code>[C++ Fehler] RAR.cpp(79): E2034 Konvertierung von 'int (__stdcall * (_closure )(unsigned int,long,long,long))(unsigned int,long,long,long)' nach 'int (__stdcall *)(unsigned int,long,long,long)' nicht möglich
[C++ Fehler] RAR.cpp(79): E2342 Keine Übereinstimmung des Typs beim Parameter 'CallBack' ('int (__stdcall *)(unsigned int,long,long,long)' erwartet, 'void' erhalten)
</code></pre>
<p>Mit einer normalen Funktion (ohne Klasse) ist das kein Problem, aber ich möchte in der Callback-Funktion auf Variablen und Funktionen der Klasse zugreifen. Wie kann ich die Funktion übergeben?</p>
<p>Nighthero</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/105395/klassenfunktionspointer-als-callback-an-unrar-dll-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 09:58:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/105395.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Mar 2005 00:38:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenfunktionspointer als Callback an UnRAR-DLL übergeben on Wed, 30 Mar 2005 00:38:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Funktionsdeklarationen:</p>
<pre><code class="language-cpp">typedef int (CALLBACK *UNRARCALLBACK)(UINT msg, LONG UserData, LONG P1, LONG P2);
void   PASCAL RARSetCallback(HANDLE hArcData, UNRARCALLBACK Callback, LONG UserData);
</code></pre>
<p>Nun möchte ich der Callback-Funktion den Funktionspointer einer nicht statischen Klassenfunktion zuweisen, aber so, wie im folgenden Versuch geht es nicht:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
int CALLBACK URAR::UnRAREvent(UINT msg, LONG UserData, LONG P1, LONG P2)
{
	//
}

//---------------------------------------------------------------------------
void __fastcall URAR::SetCallbackFunction(HANDLE hArcData, LONG UserData)
{
	RARSetCallback(hArcData, UnRAREvent, UserData);
}
</code></pre>
<p>Dies wird natürlich mit folgender Fehlermeldung vom Compiler verweigert:</p>
<pre><code>[C++ Fehler] RAR.cpp(79): E2034 Konvertierung von 'int (__stdcall * (_closure )(unsigned int,long,long,long))(unsigned int,long,long,long)' nach 'int (__stdcall *)(unsigned int,long,long,long)' nicht möglich
[C++ Fehler] RAR.cpp(79): E2342 Keine Übereinstimmung des Typs beim Parameter 'CallBack' ('int (__stdcall *)(unsigned int,long,long,long)' erwartet, 'void' erhalten)
</code></pre>
<p>Mit einer normalen Funktion (ohne Klasse) ist das kein Problem, aber ich möchte in der Callback-Funktion auf Variablen und Funktionen der Klasse zugreifen. Wie kann ich die Funktion übergeben?</p>
<p>Nighthero</p>
]]></description><link>https://www.c-plusplus.net/forum/post/755376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/755376</guid><dc:creator><![CDATA[Nighthero]]></dc:creator><pubDate>Wed, 30 Mar 2005 00:38:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktionspointer als Callback an UnRAR-DLL übergeben on Wed, 30 Mar 2005 06:41:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>genau das geht nicht.<br />
Du kannst Standard-C++ Funktionpointern nicht Membermethoden zuweisen.<br />
Dazu gibt es in BCB das Schlüsselwort __closure, was dann allerdings nicht kompatibel zu alten Callback-Funktionen ist.<br />
Du mußt dich also entscheiden : einfache Callbackfunktion oder Membermethode.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/755411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/755411</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 30 Mar 2005 06:41:00 GMT</pubDate></item></channel></rss>