oleaut32/tests: Standardize the COM usage in tmarshal.c.

This commit is contained in:
Michael Stefaniuc 2010-12-21 11:30:37 +01:00 committed by Alexandre Julliard
parent 671400c455
commit 366a92146d
1 changed files with 26 additions and 15 deletions

View File

@ -216,11 +216,16 @@ static ItestDual TestDualDisp = { &TestDualVtbl };
typedef struct Widget
{
const IWidgetVtbl *lpVtbl;
IWidget IWidget_iface;
LONG refs;
IUnknown *pDispatchUnknown;
} Widget;
static inline Widget *impl_from_IWidget(IWidget *iface)
{
return CONTAINING_RECORD(iface, Widget, IWidget_iface);
}
static HRESULT WINAPI Widget_QueryInterface(
IWidget *iface,
/* [in] */ REFIID riid,
@ -242,7 +247,7 @@ static HRESULT WINAPI Widget_QueryInterface(
static ULONG WINAPI Widget_AddRef(
IWidget *iface)
{
Widget *This = (Widget *)iface;
Widget *This = impl_from_IWidget(iface);
return InterlockedIncrement(&This->refs);
}
@ -250,7 +255,7 @@ static ULONG WINAPI Widget_AddRef(
static ULONG WINAPI Widget_Release(
IWidget *iface)
{
Widget *This = (Widget *)iface;
Widget *This = impl_from_IWidget(iface);
ULONG refs = InterlockedDecrement(&This->refs);
if (!refs)
{
@ -267,7 +272,7 @@ static HRESULT WINAPI Widget_GetTypeInfoCount(
IWidget *iface,
/* [out] */ UINT __RPC_FAR *pctinfo)
{
Widget *This = (Widget *)iface;
Widget *This = impl_from_IWidget(iface);
IDispatch *pDispatch;
HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch);
if (SUCCEEDED(hr))
@ -284,7 +289,7 @@ static HRESULT WINAPI Widget_GetTypeInfo(
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo)
{
Widget *This = (Widget *)iface;
Widget *This = impl_from_IWidget(iface);
IDispatch *pDispatch;
HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch);
if (SUCCEEDED(hr))
@ -303,7 +308,7 @@ static HRESULT WINAPI Widget_GetIDsOfNames(
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID __RPC_FAR *rgDispId)
{
Widget *This = (Widget *)iface;
Widget *This = impl_from_IWidget(iface);
IDispatch *pDispatch;
HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch);
if (SUCCEEDED(hr))
@ -325,7 +330,7 @@ static HRESULT WINAPI Widget_Invoke(
/* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
/* [out] */ UINT __RPC_FAR *puArgErr)
{
Widget *This = (Widget *)iface;
Widget *This = impl_from_IWidget(iface);
IDispatch *pDispatch;
HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch);
if (SUCCEEDED(hr))
@ -723,10 +728,15 @@ static IStaticWidget StaticWidget = { &StaticWidgetVtbl };
typedef struct KindaEnum
{
const IKindaEnumWidgetVtbl *lpVtbl;
IKindaEnumWidget IKindaEnumWidget_iface;
LONG refs;
} KindaEnum;
static inline KindaEnum *impl_from_IKindaEnumWidget(IKindaEnumWidget *iface)
{
return CONTAINING_RECORD(iface, KindaEnum, IKindaEnumWidget_iface);
}
static HRESULT register_current_module_typelib(void)
{
WCHAR path[MAX_PATH];
@ -777,16 +787,17 @@ static IWidget *Widget_Create(void)
return NULL;
This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
This->lpVtbl = &Widget_VTable;
This->IWidget_iface.lpVtbl = &Widget_VTable;
This->refs = 1;
This->pDispatchUnknown = NULL;
hr = CreateStdDispatch((IUnknown *)&This->lpVtbl, This, pTypeInfo, &This->pDispatchUnknown);
hr = CreateStdDispatch((IUnknown *)&This->IWidget_iface, This, pTypeInfo,
&This->pDispatchUnknown);
ok_ole_success(hr, CreateStdDispatch);
ITypeInfo_Release(pTypeInfo);
if (SUCCEEDED(hr))
return (IWidget *)&This->lpVtbl;
return &This->IWidget_iface;
else
{
HeapFree(GetProcessHeap(), 0, This);
@ -815,7 +826,7 @@ static HRESULT WINAPI KindaEnum_QueryInterface(
static ULONG WINAPI KindaEnum_AddRef(
IKindaEnumWidget *iface)
{
KindaEnum *This = (KindaEnum *)iface;
KindaEnum *This = impl_from_IKindaEnumWidget(iface);
return InterlockedIncrement(&This->refs);
}
@ -823,7 +834,7 @@ static ULONG WINAPI KindaEnum_AddRef(
static ULONG WINAPI KindaEnum_Release(
IKindaEnumWidget *iface)
{
KindaEnum *This = (KindaEnum *)iface;
KindaEnum *This = impl_from_IKindaEnumWidget(iface);
ULONG refs = InterlockedDecrement(&This->refs);
if (!refs)
{
@ -883,9 +894,9 @@ static IKindaEnumWidget *KindaEnumWidget_Create(void)
This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
if (!This) return NULL;
This->lpVtbl = &KindaEnumWidget_VTable;
This->IKindaEnumWidget_iface.lpVtbl = &KindaEnumWidget_VTable;
This->refs = 1;
return (IKindaEnumWidget *)This;
return &This->IKindaEnumWidget_iface;
}
static HRESULT WINAPI NonOleAutomation_QueryInterface(INonOleAutomation *iface, REFIID riid, void **ppv)