On Sun, Dec 07, 2003 at 03:37:17PM +0000, Andrew de Quincey wrote:
Hi, today I've been trying to get an Installshield 7 installer going. I think I've seen reports from other people about having problems as well.
The problems I've been having stem from the implementation of ITypeLib/ITypeInfo/etc in oleaut32. The first problem is as follows:
Installshield has a TLB which contains a type hiererachy as follows: IDispatch : ISomething : : ISomething2
An instance of ISomething2 is created. Installshield attempts to look up a method which is only defined in ISomething. The lookup fails. This is because ISomething and ISomething2 inherit from IDispatch, and are marked as TKIND_DISPATCH in the typelib. However in the code, an upwards traversal of the type hierarchy is only done for the TKIND_INTERFACE.
I've experimented with modifying the code so that it also does an upward traversal for TKIND_DISPATCH as well (as they are still interfaces which can inherit). It now finds the methods/values properly. (It still doesn't work as there are then reference count problems, but I'm looking into that.)
However, can anyone confirm if my experimental modification is the correct behaviour?
e.g. in ITypeInfo_fnGetIDsOfNames, I have changed it to if(This->TypeAttr.cImplTypes && (This->TypeAttr.typekind==TKIND_INTERFACE || This->TypeAttr.typekind==TKIND_DISPATCH)) {
Do you have a sample installer for download?
Ciao, Marcus