Well, it works, finally. No more crashes/hangs :) That is - sort of.
Unfortunately, it's a bit too slow to be usable. A few wild stabs in the dark and some timing traces showed the culprit to be LoadTypeLibEx:
trace:ole:LoadTypeLibEx File L"C:\windows\system\SHDOCVW.DLL" index 1 trace:ole:LoadTypeLibEx returns 00000000, in 15 milliseconds
trace:ole:LoadTypeLibEx File L"C:\windows\system\SHDOCVW.DLL" index 1 (hmmmm, we load it again?) trace:ole:LoadTypeLibEx returns 00000000, in 46 milliseconds (odd, slower than last time)
trace:ole:LoadTypeLibEx File L"C:\windows\system\mshtml.tlb" index 1 trace:ole:LoadTypeLibEx returns 00000000, in 1208 milliseconds (over a second parsing the type library? well, maybe it is quite large)
trace:ole:LoadTypeLibEx File L"C:\windows\system\mshtml.tlb" index 1 trace:ole:LoadTypeLibEx returns 00000000, in 6689 milliseconds (almost 7 seconds to parse the type lib a second time!?!)
trace:ole:LoadTypeLibEx File L"C:\windows\system\mshtml.tlb" index 1 trace:ole:LoadTypeLibEx returns 00000000, in 42139 milliseconds
Waaaaaaah, 42 seconds! There's a big source of the sluggishness.
So, a few questions that I can chew on tomorrow:
* Shouldn't typelib loading be cached somewhere? Reparsing typelibs like this seems rather wasteful. * Why on earth would the time taken go up so massively on each run? * Where abouts in the typelib parsing could the speed hit be?
Pretty clearly no typelib is going to be so complex it takes an Athlon 1200 almost a minute to parse, there is a nasty bug there somewhere.
thanks -mike