[2/2] oleaut32: Implement TLB dependencies lookup in resources (resend 3 - last submit before abandon)
Alexandre Julliard
julliard at winehq.org
Thu Oct 30 20:48:33 CDT 2014
Guillaume Charifi <guillaume.charifi at sfr.fr> writes:
> + strcpyW(szTLBPath, szPath);
> + snprintfW(szStringName, sizeof(szStringName)/sizeof(WCHAR), resFormatStrW, PtrToInt(lpszIntName));
> + strcatW(szTLBPath, szStringName);
> +
> + ret = TLB_PEFile_Open(szPath, PtrToInt(lpszIntName), &pBase, &dwTLBLength, &pFile);
> + if (ret == TYPE_E_CANTLOADLIBRARY)
> + ret = TLB_NEFile_Open(szPath, PtrToInt(lpszIntName), &pBase, &dwTLBLength, &pFile);
> + if (ret == TYPE_E_CANTLOADLIBRARY)
> + ret = TLB_Mapping_Open(szPath, &pBase, &dwTLBLength, &pFile);
> + if (SUCCEEDED(ret))
> + {
> + if (dwTLBLength >= 4)
> + {
> + DWORD dwSignature = FromLEDWord(*((DWORD*) pBase));
> + if (dwSignature == MSFT_SIGNATURE)
> + pTLib = ITypeLib2_Constructor_MSFT(pBase, dwTLBLength);
> + else if (dwSignature == SLTG_SIGNATURE)
> + pTLib = ITypeLib2_Constructor_SLTG(pBase, dwTLBLength);
> + else
> + {
> + FIXME("Header type magic 0x%08x not supported.\n", dwSignature);
> + ret = E_FAIL;
> + }
> + }
> + else
> + ret = E_FAIL;
> + IUnknown_Release(pFile);
> + }
You should avoid duplicating all that code.
> + if(pTLib) {
> + ITypeLibImpl *impl = impl_from_ITypeLib2(pTLib);
> + ret = UuidEqual((UUID *)This->guid, (UUID *)TLB_get_guid_null(impl->guid), &rpc_stat);
> + ITypeLib_Release((ITypeLib *)pTLib);
> +
> + ret = (ret == TRUE) ? LoadTypeLibEx(szTLBPath, REGKIND_NONE, (ITypeLib **)&pTLib) : E_FAIL;
> + }
That's pretty ugly.
--
Alexandre Julliard
julliard at winehq.org
More information about the wine-devel
mailing list