Funktionen in DLLs



  • Hi!

    Ich versuche Funktionen anderen Funktionen in einer DLL zu zuweisen. Ich bekomme aber immer den Fehler:

    [C++ Error] FormFunc.cpp(30): E2034 Cannot convert 'void (_fastcall *)(TObject *,TMouseButton,TShiftState,int,int)' to 'void (_fastcall * (_closure )(TObject *,TMouseButton,TShiftState,int,int))(TObject *,TMouseButton,TShiftState,int,int)'

    So sieht meine Header Datei aus:

    #ifndef _FormFunc_H
    #define _FormFunc_H
    
    #ifdef __DLL__
    # define DLL_EXP __declspec(dllexport)
    #else
    # define DLL_EXP __declspec(dllimport)
    #endif
    
    extern "C" void DLL_EXP CustomFormPaint(TObject *Sender);
    extern "C" void DLL_EXP CustomFormCreate(TObject *Sender);
    
            TImage* iClose;
            TImage* iCaption;
    
            String CustomCaption;
    
            void __fastcall CustomFormMouseDown (TObject* Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
            void __fastcall CustomMouseClick(TObject *Sender);
            void __fastcall CustomMouseMove(TObject *Sender,
                            TShiftState Shift, int X, int Y);
            void __fastcall CustomMouseDown(TObject *Sender,
                            TMouseButton Button, TShiftState Shift, int X, int Y);
            void __fastcall CustomMouseUp(TObject *Sender,
                            TMouseButton Button, TShiftState Shift, int X, int Y);
            void __fastcall CustomFormActivate(TObject *Sender);
            void __fastcall CustomFormDeactivate(TObject *Sender);
    #endif
    

    Meine CPP Datei sieht so aus:

    ...
    void DLL_EXP CustomFormCreate(TObject* Sender)
    {
            CustomCaption =  dynamic_cast<TForm *>(Sender)->Caption;
    
            iCaption = new TImage( dynamic_cast<TForm *>(Sender));
            iCaption->Parent = dynamic_cast<TForm *>(Sender);
            iCaption->AutoSize   = true;
            iCaption->Picture->Bitmap->LoadFromResourceName(int(HInstance),"Sel" + CustomCaption);
            iCaption->Visible = true;
    
            iCaption->Top  = 2;
            iCaption->Left = ((dynamic_cast<TForm *>(Sender)->Width - 22)/2) - (iCaption->Width/2);
            iCaption->OnMouseDown = CustomFormMouseDown;
    }
    //---------------------------------------------------------------------------
    void __fastcall CustomFormMouseDown (TObject* Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
    {
            ReleaseCapture();
            SendMessage(dynamic_cast<TForm *>(Sender)->Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
    }
    //---------------------------------------------------------------------------
    

    Was ist an der Zeile: iCaption->OnMouseDown = CustomFormMouseDown; falsch? In einer Anwendung kann man das ja machen?

    Schon mal Danke...

    [ Dieser Beitrag wurde am 05.04.2003 um 20:38 Uhr von Kid Challanger editiert. ]



  • Ein Funktionspointer auf ein MouseDown-Ereignis ist mit dem Borland-Schlüsselwort __closure versehen. Das bedeutet, dass die Funktion in einer Klasse enthalten sein muss.



  • Was heißt das?

    Wie kann ich das dann machen?



  • Lass dir was einfallen.



  • Das hilft! 😕

    Ich habe aber einen Weg gefunden. Ob man das so macht weiß ich nicht.

    Trotzdem Danke!



  • Original erstellt von Kid Challanger:
    Das hilft! 😕
    Ich habe aber einen Weg gefunden.

    Sag ich doch. Einmal selber nachdenken hat noch niemandem geschadet!


Anmelden zum Antworten