<?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[Callback-Funktion mit Shared Libray verwenden?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Frage: ist es in c++ möglich, aus einer Methode einer Shared Library heraus eine als Funktionenzeiger übergebene Callback-Methode einer anderen, im Voraus unbekannten Klasse aufzurufen?</p>
<p>Ich baue nämlich gerade einen Prediktor, der als Shared Library mit mehreren Simulatoren zusammengelinkt werden soll. Jetzt gibt es im Prediktor die Methode predictEvent(), die Abhängig von den simulierten Daten ein Ereignis vorhersagen kann oder eben nicht. Ich würde nun gerne erreichen, dass man der Methode predictEvent() einen Funktionenzeiger auf eine Callback-Methode des jeweiligen Simulators mitgeben kann, z.b. Simulator1::handleEvent( EventInfo&amp; ). Diese soll dann vom Predictor aufgerufen werden, wenn er ein Ereignis vorhersagen kann.</p>
<p>Das Problem ist, dass ich in der Shared Library natürlich nicht weiß, zu welcher Klasse die Callback-Methode gehört, zum Beispiel Simulator 1 oder Simulator2. Dementsprechend erhalte ich eklige Kompilerfehler:</p>
<p><a href="http://Simulator.cc:191" rel="nofollow">Simulator.cc:191</a>: error: no matching function for call to ‘Predictor::predictEvent(void (Simulator1::*)(EventInfo&amp;))’</p>
<p>Predictor.h:161: note: candidates are: void Predictor::predictEvent(void (*)(EventInfo&amp;))</p>
<p>Mir ist schon klar, dass ich beim Aufruf eigentlich den ::*-Operator verwenden sollte. Alledrings kann ich im Predictor (also in der Shared Library) ja nicht wissen, welche Klasse predict() aufgreufen hat...</p>
<p>Hab schon alles Möglich ausprobiert und wäre sehr dankbar für einen Hinweis, ob das überhaupt funktionieren kann.</p>
<p>lg<br />
SweetNuthin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165414/callback-funktion-mit-shared-libray-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 14:32:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165414.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Nov 2006 16:58:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Callback-Funktion mit Shared Libray verwenden? on Sun, 19 Nov 2006 16:58:45 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Frage: ist es in c++ möglich, aus einer Methode einer Shared Library heraus eine als Funktionenzeiger übergebene Callback-Methode einer anderen, im Voraus unbekannten Klasse aufzurufen?</p>
<p>Ich baue nämlich gerade einen Prediktor, der als Shared Library mit mehreren Simulatoren zusammengelinkt werden soll. Jetzt gibt es im Prediktor die Methode predictEvent(), die Abhängig von den simulierten Daten ein Ereignis vorhersagen kann oder eben nicht. Ich würde nun gerne erreichen, dass man der Methode predictEvent() einen Funktionenzeiger auf eine Callback-Methode des jeweiligen Simulators mitgeben kann, z.b. Simulator1::handleEvent( EventInfo&amp; ). Diese soll dann vom Predictor aufgerufen werden, wenn er ein Ereignis vorhersagen kann.</p>
<p>Das Problem ist, dass ich in der Shared Library natürlich nicht weiß, zu welcher Klasse die Callback-Methode gehört, zum Beispiel Simulator 1 oder Simulator2. Dementsprechend erhalte ich eklige Kompilerfehler:</p>
<p><a href="http://Simulator.cc:191" rel="nofollow">Simulator.cc:191</a>: error: no matching function for call to ‘Predictor::predictEvent(void (Simulator1::*)(EventInfo&amp;))’</p>
<p>Predictor.h:161: note: candidates are: void Predictor::predictEvent(void (*)(EventInfo&amp;))</p>
<p>Mir ist schon klar, dass ich beim Aufruf eigentlich den ::*-Operator verwenden sollte. Alledrings kann ich im Predictor (also in der Shared Library) ja nicht wissen, welche Klasse predict() aufgreufen hat...</p>
<p>Hab schon alles Möglich ausprobiert und wäre sehr dankbar für einen Hinweis, ob das überhaupt funktionieren kann.</p>
<p>lg<br />
SweetNuthin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177300</guid><dc:creator><![CDATA[SweetNuthin]]></dc:creator><pubDate>Sun, 19 Nov 2006 16:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to Callback-Funktion mit Shared Libray verwenden? on Sun, 19 Nov 2006 17:05:07 GMT]]></title><description><![CDATA[<p>Zu einer Methode gehört immer ein Objekt =&gt; nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177301</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sun, 19 Nov 2006 17:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Callback-Funktion mit Shared Libray verwenden? on Mon, 20 Nov 2006 07:34:44 GMT]]></title><description><![CDATA[<p>Warum definierst du keine Schnittstellen-Klasse von dem alle Varianten abgeleitet werden müssen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177561</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Mon, 20 Nov 2006 07:34:44 GMT</pubDate></item><item><title><![CDATA[Reply to Callback-Funktion mit Shared Libray verwenden? on Mon, 20 Nov 2006 09:25:51 GMT]]></title><description><![CDATA[<p>lolz schrieb:</p>
<blockquote>
<p>Zu einer Methode gehört immer ein Objekt =&gt; nein.</p>
</blockquote>
<p>Zu einer statischen Methode gehört kein Objekt =&gt; ja.<br />
Häufig besteht die Möglichkeit ein 'UserInfo' mitzugeben, ein (int) oder (void *), das zum Beispiel den Zeiger auf das Objekt darstellen kann.</p>
<p>In der statischen Funktion kannst Du dann den UserData-&gt;Member() aufrufen.</p>
<p>Die Frage ist also hier, ob Deine shared Library Dir ein Feld UserData zur Verfügung stellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177626</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Mon, 20 Nov 2006 09:25:51 GMT</pubDate></item></channel></rss>