Aric Stewart wrote:
> + if (r == S_OK);
I don't think you want to put a semi colon there.
> + {
> + if (pwzLocation)
> + IHlink_SetStringReference(*(IHlink**)ppvObj, HLINKSETF_LOCATION,
> + NULL, pwzLocation);
> + if (pwzFriendlyName)
> + IHlink_SetFriendlyName(*(IHlink**)ppvObj, pwzFriendlyName);
> + if (pihlsite)
> + IHlink_SetHlinkSite(*(IHlink**)ppvObj, pihlsite, dwSiteData);
> + if (pimkTrgt)
> + IHlink_SetMonikerReference(*(IHlink**)ppvObj, 0, pimkTrgt,
> + pwzLocation);
Rather than continually casting ppvObj, why not make a temporary
variable of type IHlink?
> +static HRESULT WINAPI IHlink_fnGetMonikerReference(IHlink* iface,
> + DWORD dwWhichRef, IMoniker **ppimkTarget, LPWSTR *ppwzLocation)
> +{
> + IHlinkImpl *This = (IHlinkImpl*)iface;
> +
> + TRACE("(%p) -> (%li %p %p)\n",This, dwWhichRef, ppimkTarget, ppwzLocation);
> +
> + if(ppimkTarget)
> + {
> + if (This->Moniker)
> + *ppimkTarget = This->Moniker;
> + else if (This->Site)
> + IHlinkSite_GetMoniker(This->Site, This->SiteData,
> + OLEGETMONIKER_FORCEASSIGN, OLEWHICHMK_CONTAINER,
> + (LPVOID)ppimkTarget);
> + }
> +
> + return S_OK;
> +}
The above function doesn't look right. You don't use dwWhichRef or
ppwzLocation, and you unconditionally return S_OK even when *ppimkTarget
is uninitialized or IHlinkSite_GetMoniker fails.
Mike