Installers freezing - ole, games

Robert Shearman rob at
Sun Sep 4 02:17:06 CDT 2005

Ivan Gyurdiev wrote:

> Hi,
> I've been trying to get GTA: San Andreas,
> and Battlefield 2 running on Linux, so far
> without success.
> I suspect they are running into the same bug,
> because they produce very similar output (ole fixmes).
> Both games will freeze at some point during the install.
> Strangely, I don't see any errors, but I have provided
> an ole trace for each. Do you have any suggestions as to
> what the problem might be, or how to track it down?

Thanks for reporting this. In order for the logs of these types of 
programs to make sense, you really need to give me one with 
+ole,+olerelay,+seh,+tid options. I suspect it is the following bug though:

In newer InstallShields, there is a marshaled object that contains a 
function with a VT_PTR -> VT_USERDEFINED( TKIND_ENUM ). This should be 
treated as "int *", but is actually treated as "int". This is due to 
some broken logic in the typelib marshaler that is designed to fix the 
problem with VT_PTR -> VT_USERDEFINED( TKIND_INTERFACE ) -> "IUnknown 
*", but where we should dereference the pointer any more.
We probably need to use the logic in ITypeInfo::Invoke to appropriately 
transform the soup of pointers and userdefined types into something we 
can use. I should also need to check what things are accepted in the 
native version. i.e. is VT_PTR -> VT_PTR -> VT_USERDEFINED( TKIND_ENUM ) 
supported? If so, that isn't representable by the VARIANT vt's, so we 
would need to treat it differently than the ITypeInfo::Invoke case.

This is a high priority for me as this one bug prevents a number of 
installers from working correctly. However, I'm in the middle of some 
other work at the moment, so I don't know when I'll get around to it.

Rob Shearman

More information about the wine-devel mailing list