Installers freezing - ole, games

Robert Shearman rob at codeweavers.com
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?
>
> http://bugs.winehq.org/show_bug.cgi?id=3108


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