On 17.04.2017 6:43, Alistair Leslie-Hughes wrote:
else if (rightvt == VT_DISPATCH)
{
/* The returned Dispatch Value, may not be able to be coerced, ie. VT_NULL */
hres = VariantChangeTypeEx(&bstrvar_left,left,0,0,VT_BSTR);
if (hres != S_OK && hres != DISP_E_TYPEMISMATCH)
return hres;
} else { hres = VariantChangeTypeEx(&bstrvar_left,left,0,0,VT_BSTR);
This is suspiciously similar to default case, in last else block. Could it mean VariantChangeTypeEx() should be fixed instead?
- if (This->bFailInvoke)
return E_OUTOFMEMORY;
I think it's better to use some non-specific error code that triggers FAILED() but is not generic as E_OUTOFMEMORY, anything above 0x8000000 I suppose. Also maybe it's better to use exact code instead of bFailInvoke, and return if (FAILED(This->hr))?
+static inline DummyDispatch *impl_from_IDispatch(IDispatch *iface) +{
- return CONTAINING_RECORD(iface, DummyDispatch, IDispatch_iface);
+}
+static ULONG WINAPI DummyDispatch_AddRef(IDispatch *iface) +{
- DummyDispatch *This = impl_from_IDispatch(iface);
- return InterlockedIncrement(&This->ref);
+}
If static object is enough, you can remove reference counter.
- if (pVarCmp)
ok(pVarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
"VarCat: EMPTY concat with EMPTY did not return empty VT_BSTR\n");
This is not a problem this patch introduces, but there's no reason to continue to use pVarCmp, as it's always available on platforms we're testing on.