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