Hi, This implements ITypeInfo::GetDllEntry to some degree. I do not know yet how to find out the Dll Name. Ciao, Marcus Changelog: Added partial implementation of ITypeInfo::GetDllEntry(). Index: typelib.c =================================================================== RCS file: /home/wine/wine/dlls/oleaut32/typelib.c,v retrieving revision 1.78 diff -u -r1.78 typelib.c --- typelib.c 8 Nov 2002 18:51:28 -0000 1.78 +++ typelib.c 10 Nov 2002 21:35:57 -0000 @@ -4469,7 +4475,34 @@ WORD *pwOrdinal) { ICOM_THIS( ITypeInfoImpl, iface); - FIXME("(%p) stub!\n", This); + TLBFuncDesc *pFDesc; + + FIXME("(%p, memid %lx, %d, %p, %p, %p), partial stub!\n", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal); + + for(pFDesc=This->funclist; pFDesc; pFDesc=pFDesc->next) + if(pFDesc->funcdesc.memid==memid){ + dump_TypeInfo(This); + dump_TLBFuncDescOne(pFDesc); + + /* FIXME: This is wrong, but how do you find that out? */ + if (pBstrDllName) { + const WCHAR oleaut32W[] = {'O','L','E','A','U','T','3','2','.','D','L','L',0}; + *pBstrDllName = SysAllocString(oleaut32W); + } + + if (HIWORD(pFDesc->Entry) && (pFDesc->Entry != (void*)-1)) { + if (pBstrName) + *pBstrName = SysAllocString(pFDesc->Entry); + if (pwOrdinal) + *pwOrdinal = -1; + return S_OK; + } + if (pBstrName) + *pBstrName = NULL; + if (pwOrdinal) + *pwOrdinal = (DWORD)pFDesc->Entry; + return S_OK; + } return E_FAIL; }