a_villacis@palosanto.com wrote:
As of 2006-07-14, the CVS snapshot of Wine 0.9.17 broke MS Visual Basic collections, when they ask for the _NewEnum in the _Collection interface. This method is used for the For Each...Next language construct, when applied to collection interfaces implemented in external DLLs (that is, collections compiled inside the same EXE where they are used are not affected). After a little digging I found that a recent patch adds a FUNCFLAG_FRESTRICTED check when looking for appropriate methods in an interface:
(from dlls/oleaut32/typelib.c: 5223)
/* we do this instead of using GetFuncDesc since it will return a fake * FUNCDESC for dispinterfaces and we want the real function description */ for (pFuncInfo = This->funclist; pFuncInfo; pFuncInfo=pFuncInfo->next) if ((memid == pFuncInfo->funcdesc.memid) && (wFlags & pFuncInfo->funcdesc.invkind) && !(pFuncInfo->funcdesc.wFuncFlags & FUNCFLAG_FRESTRICTED)) <-- breaks VB collections break;
If the FUNCFLAG_FRESTRICTED check is removed, the problem is solved. I would normally send in a patch for this, but since this check was deliberately added, there must be some other reason why this check was deemed necessary, so I am sending this notice instead.
Yes, the change is obviously incorrect since it causes regressions. I think I should have been checking the restricted flag on the interface, rather than on the function.