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
file .h (classe "util")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 **/
nella pagina cpp (classe "util") dentro il codice di inizializzazione della classecodice:void StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event); StatusCallBack* myCallBack;
sempre dentro il cpp (classe "util") (fuori dall'inizializzazione ovviamente)codice://create callback myCallBack = new StatusCallBack(this,&Util::StatusEventHandler); //handle to keep callback away from garbage collector gchStatus = GCHandle::Alloc(myCallBack); GrCapInitialize(myCallBack);
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
già da qui potete vedere che non hanno messo le funzioni con __declare e che "GrCapInitialize" richiede GRCAP_STATUS_EVENT_PROC come parametro.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 **/
il mio file fingerprint.h (classe fingerprint)
nel file fingerprint.cpp (classe fingerprint) (dentro l'inizializzazione)codice:static void CALLBACK StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event);
sempre nel file fingerprint.cpp (classe fingerprint) (fuori dall'inizializzazione)codice:GrCapInitialize(&StatusEventHandler);
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ò?codice:void CALLBACK fingerprint::StatusEventHandler(char* idSensor, GRCAP_STATUS_EVENTS event) { ... }

Rispondi quotando
