Callback in VCL Anwendung

PaRoX

Grünschnabel
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:

Code:
#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:

Code:
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!
 
Zuletzt bearbeitet:
Hallo,

welche Code steht denn in der Zeile 28, die vom Compiler angemeckert wird? Dein Beispielcode hat nämlich nicht so viele Zeilen ...

Gruß
MCoder
 
Ja, ich habe den Code ein wenig ausgedünnt und mich auf das wesentliche beschränkt .

In der Zeile steht folgendes:

Code:
mCallbacks.pfnImageReady = ImageReady;
 
Hallo nochmal,

das Problem lag in der Funktionendeklaration. Ich habe die Funktion innerhalb der Klasse TForm1 deklariert (was für Euch nicht sichtbar war) und somit konnte ich innerhalb des Codes nicht wie gewohnt darau zugreifen.

Danke soweit und bis demnächst,

PaRoX
 
Zurück