Installers freezing - ole, games
rob at codeweavers.com
Sun Sep 4 02:17:06 CDT 2005
Ivan Gyurdiev wrote:
> 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.
More information about the wine-devel