Funbktionspointer als Eigenschaft
-
Hoi zäme,
Ich will eine Eigenschaft in meiner Klasse einfügen, welche einen Funktions-Pointer der wie folgt erstellt wurde, verlangt.
void __fastcall (*fuk_p)(PPO2*);Wie realisiere ich sowas, das ich im Prinzip eine Funktion in der Klasse aufrufen kann, die Funktion sich aber in einer anderen Klasse befindet...?
Danke!

-
Siehe Signatur / Komponentenentwicklung/ Ereignisse.
-
Profi_p->ParamError=IfError;
Wenn ich so der Eigenschaft den Funktionspointer übergeben will, kruieg ich folgenden Fehler:"[C++ Fehler] MainForm.cpp(4404): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden"
-
Okay, ich konnte es wie folgt lösen:
// Typedef: typedef void __fastcall (__closure *funk_p)(PPO2 *Value); //property-declaration: __property funk_p ParamError={ read=GetParamError, write=SetParamError }; //private-var & Access-Function-declarations: funk_p* FParamError; void __fastcall SetParamError(funk_p value); funk_p __fastcall GetParamError(); //Access-Function-implementations: void __fastcall TProfibus::SetParamError(funk_p value) { if((*FParamError) != value) { (*FParamError) = value; } } //-------------------------------------------------------------------------- - funk_p __fastcall TProfibus::GetParamError() { return (*FParamError); } //--------------------------------------------------------------------------Jetzt hab' ich aber noch das Problem, dass ich der Eigenschaft gerne im Konstruktor einen Default-Wert übergeben würde, damit ich vor dem Aufruf mit einer if() abchecken kann, ob ein gültiger Zeiger vorhanden ist. z.B. so:
if (this->ParamError) { this->ParamError(&locrec_struct); i=DEF_CONTROL+1; }Aber wenn ich einfach im Konstruktor this->ParamError=NULL; einfüge, tritt eine Exception auf, wesshalb bloss? wie kann ich das umgehen? Danke!!!
-
wenn du
if(ParamError)abfragst, rufst du die Getter-Methode auf, in der der Pointer dereferenziert wird. Wenn der Null ist, gibt das eine Zugriffsverletzung.
Andere Frage, warum nimmst du einen Pointer auf einen Pointer ?
Das ist meiner Meinung nach ziemlich überflüssig.
funk_p FParamError;reicht doch aus. Das ist doch schon ein Pointer.
-
AndreasW schrieb:
wenn du
if(ParamError)abfragst, rufst du die Getter-Methode auf, in der der Pointer dereferenziert wird. Wenn der Null ist, gibt das eine Zugriffsverletzung.
Andere Frage, warum nimmst du einen Pointer auf einen Pointer ?
Das ist meiner Meinung nach ziemlich überflüssig.
funk_p FParamError;reicht doch aus. Das ist doch schon ein Pointer.
Das ist korrekt, ich hab es jetzt geändert und jetzt läufts...
