Ciao a tutti ho un problema,
ho una funzione per registrare un interrupt, con questo prototipo:
se la utilizzo in codice c non dà problemi. Io però ho bisogno di includerla in un mio progetto c++ ed ho utilizzato queste classi:codice:Error_t __DECL ddcSetBCRTEvent(Device_p pCrd, Error_t(*usr_handler)(Device_p pCrd, S16BIT type, S16BIT param));
file PInterruptHandler.h
file PInterruptHandler.cppcodice:class PInterruptHandler { private: PConfigurationCard *configurationCard; static PInterruptHandler *objPtr; public: PInterruptHandler(PConfigurationCard* configCard); PInterruptHandler(void); ~PInterruptHandler(void); Error_t BcIRQHandler(Device_p _pISRCrd, S16BIT _intrType, S16BIT _param); static Error_t CallBackBcIRQHandler (Device_p _pISRCrd, S16BIT _intrType, S16BIT _param) { return objPtr->BcIRQHandler(_pISRCrd, _intrType, _param); } public: list<MESSAGE> *messageList; };
ho utilizzato un'altra classe, chiamata PBusController, per registrare il metodo statico in questo modo:codice:PInterruptHandler::PInterruptHandler(void) { } PInterruptHandler::~PInterruptHandler(void) { PInterruptHandler::objPtr = nullptr; } PInterruptHandler::PInterruptHandler(PConfigurationCard *configCard) { this->configurationCard = configCard; PInterruptHandler::objPtr = this; } Error_t PInterruptHandler::BcIRQHandler(Device_p _pISRCrd, S16BIT _intrType, S16BIT _param) { ... } PInterruptHandler *PInterruptHandler::objPtr = nullptr;
PBusController.h
La compilazione va a buon fine, ma quando viene generato l'interrupt il programma va in crash.codice:PBusController::PBusController(PConfigurationCard* configCard) { ... this->interruptHandler = new PInterruptHandler(this->configurationCard); ... } S32BIT PBusController::SetInterrupt(S16BIT mask) { S32BIT Err; if(Err = ddcSetBCRTEvent(this->configurationCard->device, &(PInterruptHandler::CallBackBcIRQHandler))) { return Err; } ... }
Non so più cosa fare, qualcuno ha qualche idea???
Grazie!!!!!

Rispondi quotando