Funktionszeiger - Closure?



  • Hey Ho !
    mal wieder ich 😃
    nun ich möchte gerne eine Funktion über einem Zeiger ausführen ...
    zwar funktioniert diese in einem Consolen-Programm aber sobald ich
    eine Form erstelle und einen Zeiger auf einer Funktion mache kommt folgender Fehler:
    Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden
    Selbst als ich mit den & die Adresse versucht zu übergeben habe kam der Fehler
    Konvertierung von 'void((_closure)())()' nach 'void()()' nicht möglich
    Wie muss ich den Pointer deklarieren damit dieser funktioniert und was ist ein _closure ?
    (da hab ich mich auch schon versucht zu informieren fand jedoch nichts gescheites)

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    
    TForm1 *Form1;
    
    void (*myFunk)();
    
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	myFunk = &TestFunk;
    }
    
    void TForm1::TestFunk() {
    
    	Edit1->Text = "Test";
    }
    


  • Ist TestFunk denn static oder eine dynamische Member Funktion von TForm1?



  • void (TForm1::*myFunk)();
    myFunk = &Form1::TestFunk;
    TForm1 form;
    // Aufruf
    (form.*myFunk)();
    

    Ohne Gewähr...



  • thx ^^
    das hat mir geholfen ! danke 😉


Anmelden zum Antworten