Sorry for the long subject. I wanted to make sure folks interested in WIN32OLE stuff saw it.
Anyway, I am doing some application automation on Windows using the WIN32OLE classes. In this particular case, I have registered event handlers for a bunch of possible events that may be generated by another Windows application. I have tested about a dozen of these handlers and all is well. However, I added one more and now when I trigger the event that calls it, ruby crashes.
If I am using ruby 1.8.6 patch level 287, it generates a segfault and writes the usual message:
This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.
It also gives me a line number in my code. This line corresponds to this code:
WIN32OLE_EVENT.message_loop
I took the error message at face value and decided this was a ruby bug so I upgraded to patch level 383. (For this installation I used the one-click installer available from rubyinstaller.org, preview 2).
It still crashes but now it doesn't give me any code line or write any message at all.
I'm not well versed in Windows programming so I don't really know how to debug this. Here is what I have tried:
1. I've narrowed the "cause" down to the line of code that generates the event that the handler will get on the next call to WIN32OLE_EVENT.message_loop. If I comment it out, the program continues to run. With it in, the program crashes.
The line in question is calling a method on a WIN32OLE COM object that was previously retrieved via WIN32OLE.new. The method called generates a callback event after it finishes processing. This same COM object is also used for making other method calls that are all succeeding just fine.
2. I thought that perhaps I had a bug in my event handler code. I commented it out. The crash still occurs.
This leads me to believe that the event being received is causing the crash. I have *no idea* how to get deeper on this without getting the ruby C source and mucking about inside the #message_loop code.
Anyone have any ideas on how I can solve this? If you need more information, let me know. At this point this crash is a showstopper for me because I *need* to be able to process the event that is causing the crash.
cr