On Sun, Sep 04, 2005 at 02:17:06AM -0500, Robert Shearman wrote:
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.
Do you have a freely downloadable installer that exposes this?
Ciao, Marcus