In the case of InstallShield, it actually comes with typelibs for all the interfaces it needs to marshal (fixme: is this right?), but they actually use a mix of MIDL and typelib marshalling. In order to cover up for the fact that we don't really use RPC they're all force to go via the typelib marshaller - that's what the 1 || hack is for and what the "Registering non-automation type library!" warning is about (I think).
Yes, correct. I don't remember the interface, but I think its IDispatch or something.
Thats why we need stdole32.tlb, it has the 2 or 3 core interface typelibs we need for marshalling all the InstallShield interfaces.
Then there's a bunch of stuff I still don't understand, like ICallFrame, interface pointer swizzling, exactly where and how all this stuff is actually implemented and so on.
Pretty much sums up what I would say :) Thanks for writing this, Mike!
Ciao, Marcus