You hate VB? Well, great, I code in C++
You have to use QueryInterface to get IMessenger and set it to a global variable (so that your call back function can use it) in Initialize function, like
IMessenger* MsgrInstance;
iMessengerObj->QueryInterface(IID_IMessenger,(void**)&MsgrInstance);