<br><br><div class="gmail_quote">2012/10/24 Dmitry Timoshkov <span dir="ltr"><<a href="mailto:dmitry@baikal.ru" target="_blank">dmitry@baikal.ru</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">Christian Costa <<a href="mailto:titan.costa@gmail.com">titan.costa@gmail.com</a>> wrote:<br>
<br>
> +static HRESULT WINAPI ID3DXFileImpl_QueryInterface(ID3DXFile *iface, REFIID riid, void **ret_iface)<br>
> +{<br>
> +    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ret_iface);<br>
> +<br>
> +    if (IsEqualGUID(riid, &IID_IUnknown) ||<br>
> +        IsEqualGUID(riid, &IID_ID3DXFile))<br>
> +    {<br>
> +        iface->lpVtbl->AddRef(iface);<br>
<br>
</div>Isn't there an appropriate xxx_AddRef() macro?<br></blockquote><div><br></div><div>No.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> +        *ret_iface = iface;<br>
> +        return S_OK;<br>
> +    }<br>
> +<br>
> +    ERR("(%p)->(%s, %p), not found\n", iface, debugstr_guid(riid), ret_iface);<br>
<br>
</div>FIXME seems more appropriate here.<br></blockquote><div><br></div><div>No. All interfaces are implemented here.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im"><br>
> +    *ret_iface = NULL;<br>
> +    return E_NOINTERFACE;<br>
> +}<br>
<br>
</div>...<br>
<div class="im"><br>
> +HRESULT WINAPI D3DXFileCreate(ID3DXFile **dxfile)<br>
> +{<br>
> +    ID3DXFileImpl *object;<br>
> +<br>
> +    TRACE("(%p)\n", dxfile);<br>
> +<br>
> +    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));<br>
<br>
</div>What's the reason for HEAP_ZERO_MEMORY here?<br></blockquote><div><br></div><div>It's common to do it this way. Only non zero value are set on creation.</div><div>Usually several members are set in methods.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> +    if (!object)<br>
> +    {<br>
> +        ERR("Out of memory\n");<br>
> +        return E_OUTOFMEMORY;<br>
> +    }<br>
<br>
</div>The ERR() is useless here, just return E_OUTOFMEMORY in such situations.<br>
<span class="HOEnZb"><font color="#888888"><br><br></font></span></blockquote><div><br></div><div>It's done this way in many places in wine.</div></div><br>