<?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[memberfunktions aufruf durch pointer funktioniert nur halb]]></title><description><![CDATA[<p>Hi.<br />
Ich arbeite gerade an einem Project für eine tasking queue. An das Ende der Schlange werden pointer zu Strukturen gehängt die Prioritär, Pointer wie auch den Parameter des Tasks tragen. An der Stelle, an der die Tasks ausgeführt werden gibt es ein kleines Problem. Die Funktion wird gerufen, aber der 32-bit Wert wird nicht richtig übergeben (was zum Error führt).</p>
<pre><code class="language-cpp">//header.h
typedef int (CLASSA::*PFUC) (DWORD _Parameter);

typedef struct task{

  PFUNC Funktion;
  DWORD Parameter;
  BYTE  Flag;
}TASK;
</code></pre>
<pre><code class="language-cpp">//queue.cpp
void
__cdecl CLASSA::ExecuteTask( TASK * _pTask ){

    //Bis hierhin sind noch alle Werte im richtigen Bereicht
    _pTask-&gt;Funktion( _pTask-&gt;Parameter );
}

void
__cdecl CLASSA::TaskToExecute( DWORD _SomeParameter ){

   //Funktion wird aufgerufen doch stimmt der Paramerter nicht
   printf(&quot;0x%08x\n&quot;,_SomeParameter);
}
</code></pre>
<pre><code>//parameter = 0xFFFFFFFF
//ausgeben tut er:

0x005780F6
</code></pre>
<p>Irgendwelche Ratschläge?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265584/memberfunktions-aufruf-durch-pointer-funktioniert-nur-halb</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 01:36:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265584.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Apr 2010 20:46:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to memberfunktions aufruf durch pointer funktioniert nur halb on Sun, 25 Apr 2010 21:22:01 GMT]]></title><description><![CDATA[<p>Hi.<br />
Ich arbeite gerade an einem Project für eine tasking queue. An das Ende der Schlange werden pointer zu Strukturen gehängt die Prioritär, Pointer wie auch den Parameter des Tasks tragen. An der Stelle, an der die Tasks ausgeführt werden gibt es ein kleines Problem. Die Funktion wird gerufen, aber der 32-bit Wert wird nicht richtig übergeben (was zum Error führt).</p>
<pre><code class="language-cpp">//header.h
typedef int (CLASSA::*PFUC) (DWORD _Parameter);

typedef struct task{

  PFUNC Funktion;
  DWORD Parameter;
  BYTE  Flag;
}TASK;
</code></pre>
<pre><code class="language-cpp">//queue.cpp
void
__cdecl CLASSA::ExecuteTask( TASK * _pTask ){

    //Bis hierhin sind noch alle Werte im richtigen Bereicht
    _pTask-&gt;Funktion( _pTask-&gt;Parameter );
}

void
__cdecl CLASSA::TaskToExecute( DWORD _SomeParameter ){

   //Funktion wird aufgerufen doch stimmt der Paramerter nicht
   printf(&quot;0x%08x\n&quot;,_SomeParameter);
}
</code></pre>
<pre><code>//parameter = 0xFFFFFFFF
//ausgeben tut er:

0x005780F6
</code></pre>
<p>Irgendwelche Ratschläge?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888250</guid><dc:creator><![CDATA[e_lfanew]]></dc:creator><pubDate>Sun, 25 Apr 2010 21:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to memberfunktions aufruf durch pointer funktioniert nur halb on Mon, 26 Apr 2010 07:58:09 GMT]]></title><description><![CDATA[<p>Bite gewöhne Dir C-ismen wie &quot; <code>typedef struct</code> &quot; ab. Ich musste dreimal drübergucken, um zu sehen, dass TASK nur ein Synonym für task ist.</p>
<p>Was ist CLASSA?</p>
<p>Wozu benutzt du __cdecl?</p>
<p>Du schreibst...</p>
<pre><code class="language-cpp">_pTask-&gt;Funktion( _pTask-&gt;Parameter );
</code></pre>
<p>wobei<br />
_pTask ein Zeiger auf task ist und<br />
_pTask-&gt;Funktion ein Zeiger auf eine Elementfunktion ist.<br />
Das dürfte so gar nicht kompilieren. Ich verstehe den Sinn des Ganzen nicht, kann daher auch nicht sagen, wie es richtig gemacht werden müsste. Eine Möglichkeit, wie diese Stelle zumindest kompiliert werden kann, ist diese:</p>
<pre><code class="language-cpp">(this-&gt;*(_pTask-&gt;Funktion))(_pTask-&gt;Parameter);
</code></pre>
<p>Ob es das ist, was Du willst, weiß ich nicht.</p>
<p>Wenn Dein Problem noch besteht, versuche ein <em>kleines</em> Programm zu schreiben, was Dein Problem verdeutlicht, teste es, und zeig uns dann den Code <em>vollständig</em>, inklusive einer Beschreibung von dem, was es tun soll, wie es fehlschlägt (zB Compilerfehlermeldungen), etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888329</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 26 Apr 2010 07:58:09 GMT</pubDate></item></channel></rss>