Announcement

Collapse
No announcement yet.

Funktion über ptr aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Funktion über ptr aufrufen

    Hi,

    ich will Funktionen der Art: void __fastcall Name(int Par1, int Par2, int Par3) über einen
    pointer aufrufen.
    Hierzu habe ich einen Typen:

    typedef void __fastcall (*vect)(int,int,int);
    deklariert und einen ptr diesen Types definiert:

    vect FktPtr;

    Nun will ich im Programm diesem Pointer eine Funktion zuweisen:

    FktPtr = Name1; oder
    FktPtr = Name2;

    und dann später mit (FktPtr)(1,2,3); die gewünschte Funktion aufrufen.

    FktPtr = Name1; funktioniert nicht. Es kommt eine Fehlermeldung: Member function must be called or its address taken. Was mache ich hier falsch ?

    Danke und Bye - Peter

  • #2
    Hi,

    ich habe hier ein kleines Testprogramm, das dein Problem wiedergibt:

    <pre>
    //-----------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    //-----------------------------------------------------------------
    #include <stdio.h>
    //-----------------------------------------------------------------
    #pragma argsused
    typedef void __fastcall (*TFunc)(int par1, int par2, int par3);

    void __fastcall Func1(int par1, int par2, int par3)
    {
    printf("Call to Func1\n");
    }
    void __fastcall Func2(int par1, int par2, int par3)
    {
    printf("Call to Func2\n");
    }
    int main(int argc, char* argv[])
    {
    TFunc funcPtr;

    funcPtr = Func1;
    funcPtr(1, 2, 3);
    funcPtr = Func2;
    funcPtr(1, 2, 3);
    getchar();
    return 0;
    }
    //---------------------------------------------------------
    </pre>

    Bei mir hat das Programm funktioniert.
    Es ruft allerdings normale C Funktionen auf, wie in deiner Frage beschrieben.
    Möchtest du dagegen Elementfunktionen einer Klasse aufrufen, muss deine Typdeklaration etwas anders ausschauen.

    <pre>
    typedef void __fastcall (__closure *TFunc)(int par1, int par2, int par3);
    </pre>

    Viel Erfolg

    Heik

    Comment


    • #3
      Vielen Dank Heiko,
      hat super geplappt. Mein Fehler lag lediglich im typedef. Unter normalem C funktionierte es bei mir eigentlich auch ganz prima. Nur unter C++ gab es das Problem.

      Bye - Pete

      Comment

      Working...
      X