<?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]]></title><description><![CDATA[<p>hi,</p>
<p>ich habe mir ne dll (dynamisch) gebastelt in der ich ein vcl-formular hinterlegt habe und von einer anwendung, die die dll verwendet, aus aufrufe.</p>
<p>in der dll habe ich ausserdem diverse andere units mit diversen klassen drin (diese sind alle vcl-unabhaengig). eine davon ruft eine callback-funktion auf die man mittels einer set-methode vorher definieren kann.</p>
<p>wenn ich die callback-funktion im formular definiere:</p>
<pre><code class="language-cpp">void CallbackFun(u_long BytesRead, u_long BytesToRead)
{
  ProgressBar-&gt;Position = (int) ((double) BytesRead * 100.0 / (double) BytesToRead);
}
</code></pre>
<p>und vor den relevanten funktionsaufrufen setze:</p>
<pre><code class="language-cpp">Klasse-&gt;SetCallbackFunction(CallbackFun);
</code></pre>
<p>dann bekomme ich verschiedene Schmutzverletzungen, wenn die Callback-Funktion aufgerufen wird.</p>
<p>Das ganze funktioniert aber, wenn ich keine DLL verwende, sondern das formular ganz normal in einer vcl-anwendung. dort erhalte ich keinerlei fehlermeldungen oder zugriffsverletzungen (codeguard).</p>
<pre><code class="language-cpp">class PTP_Core
{
  private:

    void (*CallbackFun) (u_long BytesRead, u_long BytesToRead);

  public:

    void SetCallbackFunction(void (*Callback) (u_long BytesRead, u_long BytesToRead));
};

void PTP_Core::SetCallbackFunction(void (*Callback) (u_long BytesRead, u_long BytesToRead))
{
  CallbackFun = Callback;
}
</code></pre>
<p>ich nehme mal an, dass liegt daran, dass die callback-funktion nicht zur formular-klasse gehoert, wenn ich diese jedoch dort hinzufüge, meckert der compiler von wegen, das die zuweisung so nicht funktioniert.</p>
<p>jemand ne idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/106904/callback-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 10:35:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/106904.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Apr 2005 13:22:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Callback-Funktion on Thu, 14 Apr 2005 13:23:32 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich habe mir ne dll (dynamisch) gebastelt in der ich ein vcl-formular hinterlegt habe und von einer anwendung, die die dll verwendet, aus aufrufe.</p>
<p>in der dll habe ich ausserdem diverse andere units mit diversen klassen drin (diese sind alle vcl-unabhaengig). eine davon ruft eine callback-funktion auf die man mittels einer set-methode vorher definieren kann.</p>
<p>wenn ich die callback-funktion im formular definiere:</p>
<pre><code class="language-cpp">void CallbackFun(u_long BytesRead, u_long BytesToRead)
{
  ProgressBar-&gt;Position = (int) ((double) BytesRead * 100.0 / (double) BytesToRead);
}
</code></pre>
<p>und vor den relevanten funktionsaufrufen setze:</p>
<pre><code class="language-cpp">Klasse-&gt;SetCallbackFunction(CallbackFun);
</code></pre>
<p>dann bekomme ich verschiedene Schmutzverletzungen, wenn die Callback-Funktion aufgerufen wird.</p>
<p>Das ganze funktioniert aber, wenn ich keine DLL verwende, sondern das formular ganz normal in einer vcl-anwendung. dort erhalte ich keinerlei fehlermeldungen oder zugriffsverletzungen (codeguard).</p>
<pre><code class="language-cpp">class PTP_Core
{
  private:

    void (*CallbackFun) (u_long BytesRead, u_long BytesToRead);

  public:

    void SetCallbackFunction(void (*Callback) (u_long BytesRead, u_long BytesToRead));
};

void PTP_Core::SetCallbackFunction(void (*Callback) (u_long BytesRead, u_long BytesToRead))
{
  CallbackFun = Callback;
}
</code></pre>
<p>ich nehme mal an, dass liegt daran, dass die callback-funktion nicht zur formular-klasse gehoert, wenn ich diese jedoch dort hinzufüge, meckert der compiler von wegen, das die zuweisung so nicht funktioniert.</p>
<p>jemand ne idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/766614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/766614</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Thu, 14 Apr 2005 13:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Callback-Funktion on Fri, 15 Apr 2005 16:09:11 GMT]]></title><description><![CDATA[<p>Bei mir klappt das so:<br />
Ich hab das mal in ne Form zum Testen gemacht.<br />
***************************************************************************</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
#ifndef CallBackFormH
#define CallBackFormH
//---------------------------------------------------------------------------
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
#include &lt;Forms.hpp&gt;

typedef int TGetPos(Boolean Test);
typedef int (*PGetPos)(Boolean Test);

//Das kommt nur rein, wenn das ne DLL werden soll!
//Ist nur zum Syntax- test hier drin
extern &quot;C&quot; __declspec(dllexport) int __stdcall GetPos(Boolean Test);

//CallBack- Funktion mit Typ von typedef!!!
TGetPos Get
{ return Test ? 7 : 13;
}
//CallBack- Funktion!!!
int Getter(Boolean Test)
{ return Test ? 3 : 5;
}
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
  //Test- Variablen!
  TGetPos F;
  PGetPos PF;
__published:	// Von der IDE verwaltete Komponenten
        void __fastcall FormClick(TObject *Sender);
/*
In CPP- Datei:
        void __fastcall TForm1::FormClick(TObject *Sender);
        { Test(Get);
          Test(Getter);
        }
*/
private:	// Anwenderdeklarationen
//        __fastcall Test(PGetPos GP)
//        oder:
        __fastcall Test(PGetPos GP)
        { int Res;
          if (GP!=NULL)
            Res=GP(true);
          if (GP!=NULL)
            Res=GP(false);
        }
public:		// Anwenderdeklarationen
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/767669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/767669</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Fri, 15 Apr 2005 16:09:11 GMT</pubDate></item></channel></rss>