WINE_DEFAULT_DEBUG_CHANNEL(ole);
-static IDispatch * StdDispatch_Construct(IUnknown * punkOuter, void * pvThis, ITypeInfo * pTypeInfo);
-
/******************************************************************************
* DispInvoke (OLEAUT32.30)
*
return hr;
}
-/******************************************************************************
- * CreateStdDispatch [OLEAUT32.32]
- *
- * Create and return a standard IDispatch object.
- *
- * RETURNS
- * Success: S_OK. ppunkStdDisp contains the new object.
- * Failure: An HRESULT error code.
- *
- * NOTES
- * Outer unknown appears to be completely ignored.
- */
-HRESULT WINAPI CreateStdDispatch(
- IUnknown* punkOuter,
- void* pvThis,
- ITypeInfo* ptinfo,
- IUnknown** ppunkStdDisp)
-{
- TRACE("(%p, %p, %p, %p)\n", punkOuter, pvThis, ptinfo, ppunkStdDisp);
-
- *ppunkStdDisp = (LPUNKNOWN)StdDispatch_Construct(punkOuter, pvThis, ptinfo);
- if (!*ppunkStdDisp)
- return E_OUTOFMEMORY;
- return S_OK;
-}
-
/******************************************************************************
* IDispatch {OLEAUT32}
void** ppvObject)
{
StdDispatch *This = impl_from_IDispatch(iface);
- TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ *ppvObject = NULL;
if (IsEqualIID(riid, &IID_IDispatch) ||
IsEqualIID(riid, &IID_IUnknown))
{
- *ppvObject = This;
- IUnknown_AddRef((LPUNKNOWN)*ppvObject);
+ *ppvObject = iface;
+ IDispatch_AddRef(iface);
return S_OK;
}
return E_NOINTERFACE;
*/
static HRESULT WINAPI StdDispatch_GetTypeInfoCount(LPDISPATCH iface, UINT * pctinfo)
{
- StdDispatch *This = impl_from_IDispatch(iface);
TRACE("(%p)\n", pctinfo);
-
- *pctinfo = This->pTypeInfo ? 1 : 0;
+ *pctinfo = 1;
return S_OK;
}
if (iTInfo != 0)
return DISP_E_BADINDEX;
- if (This->pTypeInfo)
- {
- *ppTInfo = This->pTypeInfo;
- ITypeInfo_AddRef(*ppTInfo);
- }
+ *ppTInfo = This->pTypeInfo;
+ ITypeInfo_AddRef(*ppTInfo);
+
return S_OK;
}
StdDispatch_Invoke
};
-static IDispatch * StdDispatch_Construct(
- IUnknown * punkOuter,
- void * pvThis,
- ITypeInfo * pTypeInfo)
+/******************************************************************************
+ * CreateStdDispatch [OLEAUT32.32]
+ *
+ * Create and return a standard IDispatch object.
+ *
+ * RETURNS
+ * Success: S_OK. ppunkStdDisp contains the new object.
+ * Failure: An HRESULT error code.
+ *
+ * NOTES
+ * Outer unknown appears to be completely ignored.
+ */
+HRESULT WINAPI CreateStdDispatch(
+ IUnknown* punkOuter,
+ void* pvThis,
+ ITypeInfo* ptinfo,
+ IUnknown** stddisp)
{
- StdDispatch * pStdDispatch;
+ StdDispatch *pStdDispatch;
+
+ TRACE("(%p, %p, %p, %p)\n", punkOuter, pvThis, ptinfo, stddisp);
+
+ if (!pvThis || !ptinfo || !stddisp)
+ return E_INVALIDARG;
pStdDispatch = CoTaskMemAlloc(sizeof(StdDispatch));
if (!pStdDispatch)
- return &pStdDispatch->IDispatch_iface;
+ return E_OUTOFMEMORY;
pStdDispatch->IDispatch_iface.lpVtbl = &StdDispatch_VTable;
pStdDispatch->pvThis = pvThis;
- pStdDispatch->pTypeInfo = pTypeInfo;
+ pStdDispatch->pTypeInfo = ptinfo;
pStdDispatch->ref = 1;
/* we keep a reference to the type info so prevent it from
* being destroyed until we are done with it */
- ITypeInfo_AddRef(pTypeInfo);
+ ITypeInfo_AddRef(ptinfo);
+ *stddisp = (IUnknown*)&pStdDispatch->IDispatch_iface;
- return &pStdDispatch->IDispatch_iface;
+ return S_OK;
}