<?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[pointer auf statisches objekt - programm bleibt hängen?]]></title><description><![CDATA[<p>Hi!<br />
Ich entwickel gerade ein kleines, plugin-basierendes tool unter linux (g++ 3.3.6).<br />
Die Anwendung läd plugins und ruft methoden aus diesen auf, funktioniert alles wunderbar, schön polymorph usw. Nun wollte ich an eine Funktion einen Pointer auf ein Objekt in einer statischen Klasse übergeben um dieses Objekt aus dem Plugin ansprechen zu können. Hier in etwa die Struktur:</p>
<p>hosting app:</p>
<pre><code class="language-cpp">class myhelper
{
	public:
	void do_something()
	{
	 myapp::static_dosomething();
	}
};

class myapp
{
	static myhelper	helper_to_pass;
	static void static_dosomething()
	{
		cout &lt;&lt; &quot;hey static\r\n&quot;;
	}

	static void plugin_func()
	{		
		plugin_base *plugin_p; 
		//[...]  - plugin-pointer wird zugewiesen

		plugin_p-&gt;call_something(&amp;myapp::myhelper);
	}
};

class plugin_base
{
	public:
	virtual void call_something(myhelper *arg) = 0;
};
</code></pre>
<p>plugin-code:</p>
<pre><code class="language-cpp">class test_plugin : public plugin_base
{
	public
	void call_something(myhelper *arg)
	{
		myhelper *helper_p = arg;
		helper_p-&gt;do_something();
	}
};
</code></pre>
<p>Das Programm lässt sich kompilieren, bleibt allerdings hängen (KEIN segmentation fault) wenn helper_p-&gt;do_something() gecallt wird.<br />
Ich habe mal testweise statt einem Pointer auf ein Objekt einen Pointer auf eine statische funktion übergeben (also im beispiel wäre das ein function-pointer auf static_dosomething()) und das lief einwandfrei...was mich sehr verwirrt. Warum gehts mit funktionen aber nicht mit objekten?</p>
<p>Der Sinn des ganzen soll sein, dass die Plugins Zugriff auf einen bestimmte Auswahl statischer Funktionen der Anwendung haben. Da ich keine elendig lange parameter-liste mit function-pointer haben will, wollte ich das über ein objekt wrappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168301/pointer-auf-statisches-objekt-programm-bleibt-hängen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 10:08:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168301.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Dec 2006 16:44:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to pointer auf statisches objekt - programm bleibt hängen? on Wed, 20 Dec 2006 16:44:02 GMT]]></title><description><![CDATA[<p>Hi!<br />
Ich entwickel gerade ein kleines, plugin-basierendes tool unter linux (g++ 3.3.6).<br />
Die Anwendung läd plugins und ruft methoden aus diesen auf, funktioniert alles wunderbar, schön polymorph usw. Nun wollte ich an eine Funktion einen Pointer auf ein Objekt in einer statischen Klasse übergeben um dieses Objekt aus dem Plugin ansprechen zu können. Hier in etwa die Struktur:</p>
<p>hosting app:</p>
<pre><code class="language-cpp">class myhelper
{
	public:
	void do_something()
	{
	 myapp::static_dosomething();
	}
};

class myapp
{
	static myhelper	helper_to_pass;
	static void static_dosomething()
	{
		cout &lt;&lt; &quot;hey static\r\n&quot;;
	}

	static void plugin_func()
	{		
		plugin_base *plugin_p; 
		//[...]  - plugin-pointer wird zugewiesen

		plugin_p-&gt;call_something(&amp;myapp::myhelper);
	}
};

class plugin_base
{
	public:
	virtual void call_something(myhelper *arg) = 0;
};
</code></pre>
<p>plugin-code:</p>
<pre><code class="language-cpp">class test_plugin : public plugin_base
{
	public
	void call_something(myhelper *arg)
	{
		myhelper *helper_p = arg;
		helper_p-&gt;do_something();
	}
};
</code></pre>
<p>Das Programm lässt sich kompilieren, bleibt allerdings hängen (KEIN segmentation fault) wenn helper_p-&gt;do_something() gecallt wird.<br />
Ich habe mal testweise statt einem Pointer auf ein Objekt einen Pointer auf eine statische funktion übergeben (also im beispiel wäre das ein function-pointer auf static_dosomething()) und das lief einwandfrei...was mich sehr verwirrt. Warum gehts mit funktionen aber nicht mit objekten?</p>
<p>Der Sinn des ganzen soll sein, dass die Plugins Zugriff auf einen bestimmte Auswahl statischer Funktionen der Anwendung haben. Da ich keine elendig lange parameter-liste mit function-pointer haben will, wollte ich das über ein objekt wrappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195516</guid><dc:creator><![CDATA[*BHN*-Leberknecht]]></dc:creator><pubDate>Wed, 20 Dec 2006 16:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to pointer auf statisches objekt - programm bleibt hängen? on Thu, 21 Dec 2006 08:54:00 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>vorab mal ein Danke für das gute Codebeispiel.<br />
Kannst Du Deinen Code nochmal durchsehen ?<br />
Ich denke, es kommt auf Details an und mir ist spontan was aufgefallen, was wohl nicht stimmt...</p>
<p>[BHN]-Leberknecht schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
class myapp
{
	static myhelper	helper_to_pass;
...
	static void plugin_func()
	{		
...
		plugin_p-&gt;call_something(&amp;myapp::myhelper);
	}
};
</code></pre>
</blockquote>
<p>Hier übergibst Du doch bestimt helper_to_pass und nicht die myapp::myhelper, oder ?</p>
<p>Es wäre blöd, wenn wir hier in (strukturell) anderem Code suchen als bei Dir tatsächlich läuft.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195877</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 21 Dec 2006 08:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to pointer auf statisches objekt - programm bleibt hängen? on Thu, 21 Dec 2006 17:36:05 GMT]]></title><description><![CDATA[<p>Oh <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="🙂"
    /> jau, stimmt natürlich, ich übergeb helper_to_pass, sorry <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>
<p>Ich habs inzwischen ein bischen mit gdb nachgeforscht. Das Problem ist, dass in der Funktion der lib das Symbol für do_something nicht Bekannt ist...was ja irgendwie auch logisch ist. Daher funktioniert das Ganze auch wenn ich einen function-pointer verwende (da hier ja keine symbole bekannt sein müssen, addresse und parameter-liste reichen ja), aber wenn ich ein Objekt übergebe schlägt es fehl. Wie krieg ich es jetzt hin dass die lib Zugriff auf die symbole des hosting processes kriegt? Ich lade die libs mit dlopen, da gibts ein flag RTLD_GLOBAL, dass wirkt sich aber nur auf die Symbole der geladenen lib aus (also die symbole der lib stehen anschließend global zur verfügung, können also auch von anderen libs accessed werden), aber irgendwie finde ich nichts was das gleiche mit den symbolen der hosting app macht. Ich habs mit dlopen(0,RTLD_GLOBAL) probiert, was laut den man pages eigentlich die symbole des eigenen processes laden und global zugreifbar machen sollte, aber das hat nichts gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196262</guid><dc:creator><![CDATA[*BHN*-Leberknecht]]></dc:creator><pubDate>Thu, 21 Dec 2006 17:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to pointer auf statisches objekt - programm bleibt hängen? on Thu, 21 Dec 2006 19:45:11 GMT]]></title><description><![CDATA[<p>Hm, nachdem ich mir meine eigenen Antwort nochmal durchgelesen hab, lag die Lösung ja irgendwie auf der Hand.<br />
Ich hab das ganze nun wie folgt gelöst:<br />
Im hosting process habe ich ein Objekt mit der extern Speicherklasse instanziert und lade es nun aus dem Plugin mit dlopen(0,...) (womit man auf den globalen symbol-space zugreift), das Funktioniert wunderbar und macht auch die Übergabe als Parameter überflüssig die mir eh etwas unsauber erschien.<br />
Alles roger also <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/1196329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196329</guid><dc:creator><![CDATA[*BHN*-Leberknecht]]></dc:creator><pubDate>Thu, 21 Dec 2006 19:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to pointer auf statisches objekt - programm bleibt hängen? on Fri, 22 Dec 2006 08:14:13 GMT]]></title><description><![CDATA[<p>Schön, dass wir Dir helfen konnten.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Das kenne ich von der Arbeit noch stärker - oftmals kommt man selbst auf die Lösung, wenn man das Problem jemand anderem beschreibt ... oftmals auch ohne, dass das Gegenüber verstanden hat, worum es geht (so wie hier) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196456</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 22 Dec 2006 08:14:13 GMT</pubDate></item></channel></rss>