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!