shell32: COM cleanup for IExtractIconA.

This commit is contained in:
Michael Stefaniuc 2012-01-27 14:34:47 +01:00 committed by Alexandre Julliard
parent 725db4d19d
commit f4f9be6eb0
1 changed files with 33 additions and 34 deletions

View File

@ -49,9 +49,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
typedef struct typedef struct
{ {
IExtractIconW IExtractIconW_iface; IExtractIconW IExtractIconW_iface;
IExtractIconA IExtractIconA_iface;
LONG ref; LONG ref;
const IPersistFileVtbl *lpvtblPersistFile; const IPersistFileVtbl *lpvtblPersistFile;
const IExtractIconAVtbl *lpvtblExtractIconA;
LPITEMIDLIST pidl; LPITEMIDLIST pidl;
} IExtractIconWImpl; } IExtractIconWImpl;
@ -60,6 +60,11 @@ static inline IExtractIconWImpl *impl_from_IExtractIconW(IExtractIconW *iface)
return CONTAINING_RECORD(iface, IExtractIconWImpl, IExtractIconW_iface); return CONTAINING_RECORD(iface, IExtractIconWImpl, IExtractIconW_iface);
} }
static inline IExtractIconWImpl *impl_from_IExtractIconA(IExtractIconA *iface)
{
return CONTAINING_RECORD(iface, IExtractIconWImpl, IExtractIconA_iface);
}
static const IExtractIconAVtbl eiavt; static const IExtractIconAVtbl eiavt;
static const IExtractIconWVtbl eivt; static const IExtractIconWVtbl eivt;
static const IPersistFileVtbl pfvt; static const IPersistFileVtbl pfvt;
@ -69,11 +74,6 @@ static inline IExtractIconW *impl_from_IPersistFile( IPersistFile *iface )
return (IExtractIconW *)((char*)iface - FIELD_OFFSET(IExtractIconWImpl, lpvtblPersistFile)); return (IExtractIconW *)((char*)iface - FIELD_OFFSET(IExtractIconWImpl, lpvtblPersistFile));
} }
static inline IExtractIconW *impl_from_IExtractIconA( IExtractIconA *iface )
{
return (IExtractIconW *)((char*)iface - FIELD_OFFSET(IExtractIconWImpl, lpvtblExtractIconA));
}
/************************************************************************** /**************************************************************************
* IExtractIconW_Constructor * IExtractIconW_Constructor
@ -88,7 +88,7 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
ei->ref=1; ei->ref=1;
ei->IExtractIconW_iface.lpVtbl = &eivt; ei->IExtractIconW_iface.lpVtbl = &eivt;
ei->lpvtblPersistFile = &pfvt; ei->lpvtblPersistFile = &pfvt;
ei->lpvtblExtractIconA = &eiavt; ei->IExtractIconA_iface.lpVtbl = &eiavt;
ei->pidl=ILClone(pidl); ei->pidl=ILClone(pidl);
pdump(pidl); pdump(pidl);
@ -112,7 +112,7 @@ static HRESULT WINAPI IExtractIconW_fnQueryInterface(IExtractIconW *iface, REFII
else if (IsEqualIID(riid, &IID_IPersistFile)) else if (IsEqualIID(riid, &IID_IPersistFile))
*ppv = &This->lpvtblPersistFile; *ppv = &This->lpvtblPersistFile;
else if (IsEqualIID(riid, &IID_IExtractIconA)) else if (IsEqualIID(riid, &IID_IExtractIconA))
*ppv = &This->lpvtblExtractIconA; *ppv = &This->IExtractIconA_iface;
if(*ppv) if(*ppv)
{ {
@ -409,59 +409,56 @@ static const IExtractIconWVtbl eivt =
IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl) IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl)
{ {
IExtractIconWImpl *This = (IExtractIconWImpl *)IExtractIconW_Constructor(pidl); IExtractIconWImpl *This = (IExtractIconWImpl *)IExtractIconW_Constructor(pidl);
IExtractIconA *eia = (IExtractIconA *)&This->lpvtblExtractIconA; IExtractIconA *eia = &This->IExtractIconA_iface;
TRACE("(%p)->(%p)\n", This, eia); TRACE("(%p)->(%p)\n", This, eia);
return eia; return eia;
} }
/************************************************************************** /**************************************************************************
* IExtractIconA_QueryInterface * IExtractIconA::QueryInterface
*/ */
static HRESULT WINAPI IExtractIconA_fnQueryInterface(IExtractIconA * iface, REFIID riid, LPVOID *ppvObj) static HRESULT WINAPI IExtractIconA_fnQueryInterface(IExtractIconA * iface, REFIID riid,
void **ppv)
{ {
IExtractIconW *This = impl_from_IExtractIconA(iface); IExtractIconWImpl *This = impl_from_IExtractIconA(iface);
return IExtractIconW_QueryInterface(This, riid, ppvObj); return IExtractIconW_QueryInterface(&This->IExtractIconW_iface, riid, ppv);
} }
/************************************************************************** /**************************************************************************
* IExtractIconA_AddRef * IExtractIconA::AddRef
*/ */
static ULONG WINAPI IExtractIconA_fnAddRef(IExtractIconA * iface) static ULONG WINAPI IExtractIconA_fnAddRef(IExtractIconA * iface)
{ {
IExtractIconW *This = impl_from_IExtractIconA(iface); IExtractIconWImpl *This = impl_from_IExtractIconA(iface);
return IExtractIconW_AddRef(This); return IExtractIconW_AddRef(&This->IExtractIconW_iface);
} }
/************************************************************************** /**************************************************************************
* IExtractIconA_Release * IExtractIconA::Release
*/ */
static ULONG WINAPI IExtractIconA_fnRelease(IExtractIconA * iface) static ULONG WINAPI IExtractIconA_fnRelease(IExtractIconA * iface)
{ {
IExtractIconW *This = impl_from_IExtractIconA(iface); IExtractIconWImpl *This = impl_from_IExtractIconA(iface);
return IExtractIconW_Release(This); return IExtractIconW_Release(&This->IExtractIconW_iface);
} }
/************************************************************************** /**************************************************************************
* IExtractIconA_GetIconLocation * IExtractIconA::GetIconLocation
* *
* mapping filetype to icon * mapping filetype to icon
*/ */
static HRESULT WINAPI IExtractIconA_fnGetIconLocation( static HRESULT WINAPI IExtractIconA_fnGetIconLocation(IExtractIconA * iface, UINT uFlags,
IExtractIconA * iface, LPSTR szIconFile, UINT cchMax, int * piIndex, UINT * pwFlags)
UINT uFlags,
LPSTR szIconFile,
UINT cchMax,
int * piIndex,
UINT * pwFlags)
{ {
IExtractIconWImpl *This = impl_from_IExtractIconA(iface);
HRESULT ret; HRESULT ret;
LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, cchMax * sizeof(WCHAR)); LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, cchMax * sizeof(WCHAR));
IExtractIconW *This = impl_from_IExtractIconA(iface);
TRACE("(%p) (flags=%u %p %u %p %p)\n", This, uFlags, szIconFile, cchMax, piIndex, pwFlags); TRACE("(%p) (flags=%u %p %u %p %p)\n", This, uFlags, szIconFile, cchMax, piIndex, pwFlags);
ret = IExtractIconW_GetIconLocation(This, uFlags, lpwstrFile, cchMax, piIndex, pwFlags); ret = IExtractIconW_GetIconLocation(&This->IExtractIconW_iface, uFlags, lpwstrFile, cchMax,
piIndex, pwFlags);
WideCharToMultiByte(CP_ACP, 0, lpwstrFile, -1, szIconFile, cchMax, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, lpwstrFile, -1, szIconFile, cchMax, NULL, NULL);
HeapFree(GetProcessHeap(), 0, lpwstrFile); HeapFree(GetProcessHeap(), 0, lpwstrFile);
@ -469,19 +466,21 @@ static HRESULT WINAPI IExtractIconA_fnGetIconLocation(
return ret; return ret;
} }
/************************************************************************** /**************************************************************************
* IExtractIconA_Extract * IExtractIconA::Extract
*/ */
static HRESULT WINAPI IExtractIconA_fnExtract(IExtractIconA * iface, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) static HRESULT WINAPI IExtractIconA_fnExtract(IExtractIconA * iface, LPCSTR pszFile,
UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize)
{ {
IExtractIconWImpl *This = impl_from_IExtractIconA(iface);
HRESULT ret; HRESULT ret;
INT len = MultiByteToWideChar(CP_ACP, 0, pszFile, -1, NULL, 0); INT len = MultiByteToWideChar(CP_ACP, 0, pszFile, -1, NULL, 0);
LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
IExtractIconW *This = impl_from_IExtractIconA(iface);
TRACE("(%p) (file=%p index=%u %p %p size=%u)\n", This, pszFile, nIconIndex, phiconLarge, phiconSmall, nIconSize); TRACE("(%p) (file=%p index=%u %p %p size=%u)\n", This, pszFile, nIconIndex, phiconLarge, phiconSmall, nIconSize);
MultiByteToWideChar(CP_ACP, 0, pszFile, -1, lpwstrFile, len); MultiByteToWideChar(CP_ACP, 0, pszFile, -1, lpwstrFile, len);
ret = IExtractIconW_Extract(This, lpwstrFile, nIconIndex, phiconLarge, phiconSmall, nIconSize); ret = IExtractIconW_Extract(&This->IExtractIconW_iface, lpwstrFile, nIconIndex, phiconLarge,
phiconSmall, nIconSize);
HeapFree(GetProcessHeap(), 0, lpwstrFile); HeapFree(GetProcessHeap(), 0, lpwstrFile);
return ret; return ret;
} }