How do I fire events in a windowless ActiveX control?
-
I built a control using the MFC ActiveX control wizard in VC6 and I am able to add methods, properties, and events just fine. When the control is created, I start a new thread (CWinThread-based) in the constructor. The control is not visible during runtime; rather this worker thread runs in the background (reading the serial port and doing parsing operations) and sends back information to the host application via events. The way I did this was to make the thread class a friend of the control class so that the thread class could directly call the FireEvent___ functions. Is this the right way to do this? I've Googled this and also searched cp here but came up short on specific examples. I ask this because when I test the control on VB6, sometimes the entire VB IDE shuts down (crash). When I test the control on VB.NET 2005, the event callback functions can't access any of the form controls (because the event function is called under the context of the control's worker thread). In LabView, the events fire back but all the arguments are zero; not the values that were passed to the FireEvent___ function (they are all signed long). Thanks in advance!
-
I built a control using the MFC ActiveX control wizard in VC6 and I am able to add methods, properties, and events just fine. When the control is created, I start a new thread (CWinThread-based) in the constructor. The control is not visible during runtime; rather this worker thread runs in the background (reading the serial port and doing parsing operations) and sends back information to the host application via events. The way I did this was to make the thread class a friend of the control class so that the thread class could directly call the FireEvent___ functions. Is this the right way to do this? I've Googled this and also searched cp here but came up short on specific examples. I ask this because when I test the control on VB6, sometimes the entire VB IDE shuts down (crash). When I test the control on VB.NET 2005, the event callback functions can't access any of the form controls (because the event function is called under the context of the control's worker thread). In LabView, the events fire back but all the arguments are zero; not the values that were passed to the FireEvent___ function (they are all signed long). Thanks in advance!
Hello prcarp, >> The way I did this was to make the thread class a friend of the control class so that the thread class could directly call the FireEvent___ functions. Is this the right way to do this? This is not good enough. You basically need to marshal the event sinks of your control's client to the thread managed by your CWinThread-based class. I have written a sample applcation that demonstrates this. Please email me : bio_lim_2004@yahoo.com and I'll send you the sample codes. Best Regards, Bio.