Salve ragazzi!
Sto uscendo pazzo con un sistema di callback e non riesco a darmi pace..
vediamo se potete aiutarmi almeno voi..
dunque sto facendo una classe e ho una pagina da includere di un SDK. Il mio progetto è in "c++", precisamente win32 console application.
Questo sdk è sviluppato anche per .net (da cui vi citerò prima l'esempio)
allora sul loro sample c'è scritto nella pagina da includere:
METODO C++ .NET
#grfinger.h
codice:
/** altro codice **/
//CALLBACK functions
typedef void CALLBACK GRCAP_STATUS_EVENT_PROC(char* idSensor, GRCAP_STATUS_EVENTS event);
//delegate functions
__delegate void StatusCallBack(char* idSensor, GRCAP_STATUS_EVENTS event);
//***************************************************** // Functions - CAPTURE //***************************************************** DLLIMPORT
GrCapInitialize(StatusCallBack* StatusEventHandler);
/** altro codice **/
file .h (classe "util")
codice:
void StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event);
StatusCallBack* myCallBack;
nella pagina cpp (classe "util") dentro il codice di inizializzazione della classe
codice:
//create callback myCallBack = new StatusCallBack(this,&Util::StatusEventHandler); //handle to keep callback away from garbage collector gchStatus = GCHandle::Alloc(myCallBack);
GrCapInitialize(myCallBack);
sempre dentro il cpp (classe "util") (fuori dall'inizializzazione ovviamente)
codice:
void Util::StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event) { ... }
Ok questo è il metodo .net .. adesso io devo rifarlo col c++, soltanto che l'include che forniscono col c++ è diverso dal .net. Vi posto il mio codice:
METODO C++ CONSOLE
#grfinger.h
codice:
/** altro codice **/
//CALLBACK functions
typedef void CALLBACK GRCAP_STATUS_EVENT_PROC(char* idSensor, GRCAP_STATUS_EVENTS event);
//*****************************************************
// Functions - CAPTURE
//*****************************************************
DLLIMPORT
GrCapInitialize(GRCAP_STATUS_EVENT_PROC *StatusEventHandler);
/** altro codice **/
già da qui potete vedere che non hanno messo le funzioni con __declare e che "GrCapInitialize" richiede GRCAP_STATUS_EVENT_PROC come parametro.
il mio file fingerprint.h (classe fingerprint)
codice:
static void CALLBACK StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event);
nel file fingerprint.cpp (classe fingerprint) (dentro l'inizializzazione)
codice:
GrCapInitialize(&StatusEventHandler);
sempre nel file fingerprint.cpp (classe fingerprint) (fuori dall'inizializzazione)
codice:
void CALLBACK fingerprint::StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event) { ... }
Ok.. detto questo, il tutto funziona.. soltanto che non posso interagire con membri e metodi della mia classe fingerprint perchè è come se agisse da un'altra parte.. a meno che non dichiaro "static" le cose, ed è un problema per me.. nell'esempio del .net rimane nell'ambito della classe invece.. che fò?