Callback in VCL Anwendung
-
Hallo Allerseits,
mir macht die Übergabe von Callback Funktionen zu schaffen. Und als Maschinenbauer, der im Studium nur mal JAVA programmiert hat ist das schwer genug ;-). Aber erstmal einige kurze Angaben zu meinem Projekt:
Ich schreibe zur Zeit ein VCL-Programm mit Turbo C++ zur Ansteuerung einer Olympus Digitalkamera. Zu diesem Zweck binde ich eine DLL des Herstellers (MochaDLL.dll) ein. So weit so gut. Um Rückmeldungen/Events von der Digicam zu erhalten bietet die DLL zwei Möglichkeiten: Callback-Funktionen oder Windows Messages. Ich habe mich für Ersteres entschieden.
So sieht der wohl wichtige Teil meines Codes aus:
#include <vcl.h> #include "MochaDLL.h" #include "stdio.h" #include "Camera.h" #pragma link "MochaDLL.lib" #pragma hdrstop MOCHA_CALLBACKS mCallbacks; // Struktur aus MochaDLL.h __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { mCallbacks.pfnImageReady = ImageReady; LONG lRet = InitMocha(&mCallbacks); } LONG32 CALLBACK ImageReady(ULONG32 lCam, ULONG32 ulObjHandle, void* pParam) { return 0; }
Die MOCHA_CALLBACKS Struktur sieht wie folgt aus:
typedef struct __MOCHA_CALLBACKS { MOCHAADDDEVFUNC pfnAddDevice; void* pAddDeviceParam; MOCHAREMOVEDEVFUNC pfnRemoveDevice; void* pRemoveDeviceParam; MOCHAIMAGEREADYFUNC pfnImageReady; void* pImageReadyParam; MOCHAPROPCHANGEDFUNC pfnPropChanged; void* pPropChangedParam; MOCHAUPDATECAPABILITIESFUNC pfnUpdateCapabilities; void* pUpdateCapabilitiesParam; } MOCHA_CALLBACKS, *PMOCHA_CALLBACKS;
Der Compiler spuckt folgenden Fehler aus:
[C++ Fehler] Camera.cpp(28): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden
Was mache ich falsch?
Vielen Dank schon mal für Eure Hilfe!
-
Bei welcher Zeile kommt denn dieser Fehler? Dein beispielcode hat keine 28 Zeilen.
-
Vielleicht:
mCallbacks.pfnImageReady = &ImageReady;
???
-
Im Konstruktor von TForm1 ist die Funktion ImageReady doch noch gar nicht bekannt. Deklariere sie vorher.