*/
class CFileSysEnum :
- public IEnumIDListImpl
+ public CEnumIDListBase
{
private:
public:
DWORD dwFlags,
LPENUMIDLIST *ppEnumIDList)
{
- CComObject<CFileSysEnum> *theEnumerator;
- CComPtr<IEnumIDList> result;
- HRESULT hResult;
-
- TRACE("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList);
-
- if (ppEnumIDList == NULL)
- return E_POINTER;
- *ppEnumIDList = NULL;
- ATLTRY (theEnumerator = new CComObject<CFileSysEnum>);
- if (theEnumerator == NULL)
- return E_OUTOFMEMORY;
- hResult = theEnumerator->QueryInterface(IID_PPV_ARG(IEnumIDList, &result));
- if (FAILED(hResult))
- {
- delete theEnumerator;
- return hResult;
- }
- hResult = theEnumerator->Initialize (sPathTarget, dwFlags);
- if (FAILED (hResult))
- return hResult;
- *ppEnumIDList = result.Detach();
-
- TRACE("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList);
-
- return S_OK;
+ return ShellObjectCreatorInit<CFileSysEnum>(sPathTarget, dwFlags, IID_IEnumIDList, ppEnumIDList);
}
/**************************************************************************
HRESULT WINAPI CFSFolder::CreateViewObject(HWND hwndOwner,
REFIID riid, LPVOID * ppvOut)
{
- LPSHELLVIEW pShellView;
+ CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid (&riid),
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppvOut);
- pShellView->Release();
}
}
}
{
*ppvOut = NULL;
- if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1))
- hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)this, NULL, 0, NULL, (IContextMenu**)&pObj);
+ if (IsEqualIID(riid, IID_IContextMenu) && (cidl >= 1))
+ {
+ IContextMenu * pCm = NULL;
+ hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, static_cast<IShellFolder*>(this), NULL, 0, NULL, &pCm);
+ pObj = pCm;
+ }
else if (IsEqualIID (riid, IID_IDataObject))
{
- if (cidl >= 1) {
+ if (cidl >= 1)
+ {
hr = IDataObject_Constructor (hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj);
}
else
else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1))
{
pidl = ILCombine (pidlRoot, apidl[0]);
- pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl);
+ pObj = IExtractIconA_Constructor (pidl);
SHFree (pidl);
hr = S_OK;
}
else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1))
{
pidl = ILCombine (pidlRoot, apidl[0]);
- pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl);
+ pObj = IExtractIconW_Constructor (pidl);
SHFree (pidl);
hr = S_OK;
}
else if (IsEqualIID (riid, IID_IDropTarget))
{
/* only interested in attempting to bind to shell folders, not files (except exe), so if we fail, rebind to root */
- if (cidl == 1 && SUCCEEDED(hr = this->_GetDropTarget(apidl[0], (LPVOID*)&pObj)));
- else
- hr = this->QueryInterface(IID_IDropTarget, (LPVOID*)&pObj);
+ if (cidl != 1 || FAILED(hr = this->_GetDropTarget(apidl[0], (LPVOID*) &pObj)))
+ {
+ IDropTarget * pDt = NULL;
+ hr = this->QueryInterface(IID_PPV_ARG(IDropTarget, &pDt));
+ pObj = pDt;
+ }
}
else if ((IsEqualIID(riid, IID_IShellLinkW) ||
IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1))
HRESULT WINAPI CFSFolder::GetUniqueName(LPWSTR pwszName, UINT uLen)
{
- IEnumIDList *penum;
+ CComPtr<IEnumIDList> penum;
HRESULT hr;
WCHAR wszText[MAX_PATH];
WCHAR wszNewFolder[25];
goto next;
}
}
-
- penum->Release();
}
return hr;
}
* copies items to this folder
*/
HRESULT WINAPI CFSFolder::CopyItems(IShellFolder * pSFFrom, UINT cidl,
- LPCITEMIDLIST * apidl, bool bCopy)
+ LPCITEMIDLIST * apidl, BOOL bCopy)
{
- IPersistFolder2 *ppf2 = NULL;
+ CComPtr<IPersistFolder2> ppf2 = NULL;
WCHAR szSrcPath[MAX_PATH];
WCHAR szTargetPath[MAX_PATH];
SHFILEOPSTRUCTW op;
hr = ppf2->GetCurFolder(&pidl);
if (FAILED(hr))
{
- ppf2->Release();
return hr;
}
- ppf2->Release();
hr = pSFFrom->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strRet);
if (FAILED(hr))
HeapFree(GetProcessHeap(), 0, pszTargetList);
SHFree(pidl);
- ppf2->Release();
return E_OUTOFMEMORY;
}
}
else
{
- hr = psfDesktop->BindToObject(pidl, NULL, IID_IShellFolder, (LPVOID*)&psfFrom);
+ hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, &psfFrom));
if (FAILED(hr))
{
ERR("no IShellFolder\n");
WCHAR wszPath[MAX_PATH];
WCHAR wszTarget[MAX_PATH];
- hr = this->QueryInterface(IID_IPersistFolder2, (LPVOID *) &ppf2);
+ hr = this->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
if (SUCCEEDED(hr))
{
hr = ppf2->GetCurFolder(&targetpidl);
return E_FAIL;
}
- hr = this->QueryInterface(IID_IPersistFolder2, (LPVOID *) &ppf2);
+ hr = this->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
if (SUCCEEDED(hr))
{
hr = ppf2->GetCurFolder(&targetpidl);
DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) {
CoInitialize(NULL);
_DoDropData *data = static_cast<_DoDropData*>(lpParameter);
- IDataObject *pDataObject;
- HRESULT hr = CoGetInterfaceAndReleaseStream (data->pStream, IID_IDataObject, (void**) &pDataObject);
+ CComPtr<IDataObject> pDataObject;
+ HRESULT hr = CoGetInterfaceAndReleaseStream (data->pStream, IID_PPV_ARG(IDataObject, &pDataObject));
if (SUCCEEDED(hr))
{
{
pAsyncOperation->EndOperation(hr, NULL, data->pdwEffect);
}
- pDataObject->Release();
}
//Release the CFSFolder and data object holds in the copying thread.
data->This->Release();
TRACE("CFSFolder::_LoadDynamicDropTargetHandler entered\n");
HRESULT hr;
- IPersistFile *pp;
+ CComPtr<IPersistFile> pp;
hr = SHCoCreateInstance(NULL, pclsid, NULL, IID_PPV_ARG(IPersistFile, &pp));
if (hr != S_OK)
{
ERR("Failed to query for interface IID_IShellExtInit hr %x pclsid %s\n", hr, wine_dbgstr_guid(pclsid));
return hr;
}
- pp->Release();
return hr;
}
\ No newline at end of file