Ciao a tutti,
mi trovo in questa situazione:
1) sto scrivendo un' applicazione di tipo managed in cui richiamo le funzioni di una libreria di tipo umanaged.
2) una funzione di questa libreria ha al suo interno due parametri: il puntatorte a una callback e il puntatore alla mia classe chiamante).
3) Per poter passare il puntatore alla classe mi apposggio a gcroot.
------------------------------------------------------------------
Questa è la riga di chiamata alla funzione della libreria unmanaged:
error_status err_reg_event=funzioneChiamata(miaClasse::cdeclEve ntCallback,this->_native_handle);
con:
1) cdeclEventCallback= funzione di callback implementata nella mia classe con questa sintassi
void miaClasse::cdeclEventCallback(const event_id eventID, const Event *eventData, void* customData )
{
det_pix=(gcroot<miaClasse^> )(customData);
det_pix->processEvent( eventID, eventData );
}
2) this->_native_handle è l'handle dell' oggetto che devo passare nella funzione della libreria [this->_native_handle = new gcroot<miaClasse^>();] .
La funzione lo userà per i suoi lavori e poi me lo ritorna come parametro della funzione di callback.
A questo punto, implementando la funzione di callback, ho pensato che customData (tornato come parametro nella funzione di callback) dovesse essere castato, ma così facendo mi continua a dare l'errore
error C2440: 'type cast' : cannot convert from 'void *' to 'gcroot<T>'
Spero di essere risucito a spiegare il problema.
Qualcuno sa darmi qualche indicazione su come risolvere il problema, oppure indicazioni su qualche pagina in cui venga spiegato bene come far lavorare liberire unmanaged con applicaizoni managed?
Ringrazio in anticipo per ogni tipo di suggerimento :-)