MathLink message handler not set by default
- To: mathgroup at smc.vnet.net
- Subject: [mg96794] MathLink message handler not set by default
- From: Arnaud <arnaudkoetsier at gmail.com>
- Date: Wed, 25 Feb 2009 04:02:50 -0500 (EST)
I struggled for a while to make my MathLink program (compiled for MS Windows in VC++ Express 2008) abortable following the procedure laid out in the MathLink tutorial to no avail; the global MLAbort variable which is supposed to become 1 when an abort message is sent by the kernel was never changed from zero despite regular calls to the yield function. While checking if kernel messages were getting through, in one of my routines I did printf("Message Handler address: %p\n",MLMessageHandler(stdlink)); which printed zero indicating there was no valid message handler. The entry point of my program was the usual: int main(int argc, char *argv[]) { return MLMain(argc, argv); } After rummaging around the mprep-generated C file, I noticed the point where the yield function should be set: if( MLInstance){ if( stdyielder) MLSetYieldFunction( mlp, stdyielder); if( stdhandler) MLSetMessageHandler( mlp, stdhandler); } The problem is that MLInstance=0 always. I don't know what this variable is, it looks like a pointer that is set in some windows- related procedure called MLInitializeIcon(). As a work-around, before the return statement in main() I inserted: if(!MLInstance) MLInstance=(HANDLE)1; which forced the message handler to be set and now my program receives messages from the kernel as it should and aborts properly. Does anyone know why the message handler isn't set by itself or what MLInstance is?