|
|
#include "shellprv.h"
#pragma hdrstop
#include "xiconwrap.h"
// IUnknown
STDMETHODIMP CExtractIconBase::QueryInterface(REFIID riid, void** ppv) { static const QITAB qit[] = { QITABENT(CExtractIconBase, IExtractIconA), QITABENT(CExtractIconBase, IExtractIconW), { 0 }, };
return QISearch(this, qit, riid, ppv); }
STDMETHODIMP_(ULONG) CExtractIconBase::AddRef() { return InterlockedIncrement(&_cRef); }
STDMETHODIMP_(ULONG) CExtractIconBase::Release() { if (InterlockedDecrement(&_cRef)) return _cRef;
delete this; return 0; }
CExtractIconBase::CExtractIconBase() : _cRef(1) { DllAddRef(); }
CExtractIconBase::~CExtractIconBase() { DllRelease(); }
// IExtractIconA
STDMETHODIMP CExtractIconBase::GetIconLocation(UINT uFlags, LPSTR pszIconFile, UINT cchMax, int* piIndex, UINT* pwFlags) { WCHAR sz[MAX_PATH]; HRESULT hr = _GetIconLocationW(uFlags, sz, ARRAYSIZE(sz), piIndex, pwFlags); if (S_OK == hr) { // We don't want to copy the icon file name on the S_FALSE case
SHUnicodeToAnsi(sz, pszIconFile, cchMax); }
return hr; }
STDMETHODIMP CExtractIconBase::Extract(LPCSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) { WCHAR sz[MAX_PATH];
SHAnsiToUnicode(pszFile, sz, ARRAYSIZE(sz)); return _ExtractW(sz, nIconIndex, phiconLarge, phiconSmall, nIconSize); }
// IExtractIconW
STDMETHODIMP CExtractIconBase::GetIconLocation(UINT uFlags, LPWSTR pszIconFile, UINT cchMax, int* piIndex, UINT* pwFlags) { return _GetIconLocationW(uFlags, pszIconFile, cchMax, piIndex, pwFlags); }
STDMETHODIMP CExtractIconBase::Extract(LPCWSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) { return _ExtractW(pszFile, nIconIndex, phiconLarge, phiconSmall, nIconSize); }
|