[SHELL32]
* Move the IID_NULL_PPV_ARG macro to the shobj_undoc header, next to the (also ros-specific) IID_PPV_ARG macro, so that it can be used elsewhere.

[SHELL32]
* Make use of IID_NULL_PPV_ARG in all the calls to GetUIObjectOf, and fix one instance of mismatched riid/pointer.

CORE-7330

svn path=/branches/shell-experiments/; revision=63044
This commit is contained in:
David Quintana 2014-04-29 11:14:29 +00:00
parent 8221f567e0
commit fb6dcedf18
9 changed files with 16 additions and 20 deletions

View file

@ -1358,8 +1358,6 @@ HRESULT CMenuSFToolbar::InternalContextMenu(INT iItem, INT index, DWORD_PTR dwDa
CComPtr<IContextMenu> contextMenu = NULL; CComPtr<IContextMenu> contextMenu = NULL;
LPCITEMIDLIST pidl = reinterpret_cast<LPCITEMIDLIST>(dwData); LPCITEMIDLIST pidl = reinterpret_cast<LPCITEMIDLIST>(dwData);
#define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, reinterpret_cast<void**>((static_cast<Itype**>(ppType)))
hr = m_shellFolder->GetUIObjectOf(GetToolbar(), 1, &pidl, IID_NULL_PPV_ARG(IContextMenu, &contextMenu)); hr = m_shellFolder->GetUIObjectOf(GetToolbar(), 1, &pidl, IID_NULL_PPV_ARG(IContextMenu, &contextMenu));
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
{ {

View file

@ -235,7 +235,7 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
hr = SHGetDesktopFolder(&psfDesktop); hr = SHGetDesktopFolder(&psfDesktop);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = psfDesktop->BindToObject(pSimplePidl, NULL, IID_IShellFolder2, (void**) &psfRecycleBin); hr = psfDesktop->BindToObject(pSimplePidl, NULL, IID_PPV_ARG(IShellFolder2, &psfRecycleBin));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = psfRecycleBin->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &EnumIDList); hr = psfRecycleBin->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &EnumIDList);
@ -379,7 +379,7 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
if (SUCCEEDED(SHGetDesktopFolder(&dsf))) if (SUCCEEDED(SHGetDesktopFolder(&dsf)))
{ {
HRESULT hr = dsf->GetUIObjectOf(NULL, 1, (LPCITEMIDLIST*)&pidl, IID_IShellLinkW, NULL, (LPVOID *)&psl); HRESULT hr = dsf->GetUIObjectOf(NULL, 1, (LPCITEMIDLIST*) &pidl, IID_NULL_PPV_ARG(IShellLinkW, &psl));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {

View file

@ -745,7 +745,7 @@ BOOL PidlToSicIndex (
TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small"); TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small");
if (SUCCEEDED (sh->GetUIObjectOf(0, 1, &pidl, IID_IExtractIconW, 0, (void **)&ei))) if (SUCCEEDED (sh->GetUIObjectOf(0, 1, &pidl, IID_NULL_PPV_ARG(IExtractIconW, &ei))))
{ {
if (SUCCEEDED(ei->GetIconLocation(uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags))) if (SUCCEEDED(ei->GetIconLocation(uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags)))
{ {

View file

@ -686,8 +686,7 @@ HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEM
CComPtr<IDataObject> pDataObj; CComPtr<IDataObject> pDataObj;
HRESULT hr; HRESULT hr;
hr = lpsf->GetUIObjectOf(0, 1, &pidlSimple, hr = lpsf->GetUIObjectOf(0, 1, &pidlSimple, IID_NULL_PPV_ARG(IDataObject, &pDataObj));
IID_IDataObject, 0, (LPVOID*)&pDataObj);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
STGMEDIUM medium; STGMEDIUM medium;

View file

@ -566,7 +566,7 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
/* get the iconlocation */ /* get the iconlocation */
if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION )) if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION ))
{ {
UINT uDummy,uFlags; UINT uFlags;
if (flags & SHGFI_USEFILEATTRIBUTES) if (flags & SHGFI_USEFILEATTRIBUTES)
{ {
@ -602,8 +602,7 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
else else
{ {
hr = psfParent->GetUIObjectOf(0, 1, hr = psfParent->GetUIObjectOf(0, 1,
(LPCITEMIDLIST*)&pidlLast, IID_IExtractIconW, (LPCITEMIDLIST*)&pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei));
&uDummy, (LPVOID*)&pei);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = pei->GetIconLocation(uGilFlags, hr = pei->GetIconLocation(uGilFlags,

View file

@ -1140,7 +1140,7 @@ static HRESULT SHELL_PidlGeticonLocationA(IShellFolder* psf, LPCITEMIDLIST pidl,
{ {
CComPtr<IExtractIconA> pei; CComPtr<IExtractIconA> pei;
hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_IExtractIconA, NULL, (LPVOID*)&pei); hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconA, &pei));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = pei->GetIconLocation(0, pszIconPath, MAX_PATH, piIcon, NULL); hr = pei->GetIconLocation(0, pszIconPath, MAX_PATH, piIcon, NULL);
@ -1410,7 +1410,7 @@ static HRESULT SHELL_PidlGeticonLocationW(IShellFolder* psf, LPCITEMIDLIST pidl,
{ {
CComPtr<IExtractIconW> pei; CComPtr<IExtractIconW> pei;
hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_IExtractIconW, NULL, (LPVOID*)&pei); hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = pei->GetIconLocation(0, pszIconPath, MAX_PATH, piIcon, &wFlags); hr = pei->GetIconLocation(0, pszIconPath, MAX_PATH, piIcon, &wFlags);
@ -2179,7 +2179,7 @@ HRESULT WINAPI CShellLink::DragEnter(IDataObject *pDataObject,
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_IDropTarget, NULL, (LPVOID*)&mDropTarget); hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IDropTarget, &mDropTarget));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = mDropTarget->DragEnter(pDataObject, dwKeyState, pt, pdwEffect); hr = mDropTarget->DragEnter(pDataObject, dwKeyState, pt, pdwEffect);

View file

@ -1228,8 +1228,7 @@ static IDataObject *shellex_get_dataobj( LPSHELLEXECUTEINFOW sei )
if (FAILED(r)) if (FAILED(r))
goto end; goto end;
shf->GetUIObjectOf(NULL, 1, &pidllast, shf->GetUIObjectOf(NULL, 1, &pidllast, IID_NULL_PPV_ARG(IDataObject, &dataobj));
IID_IDataObject, NULL, (LPVOID*) &dataobj);
end: end:
if (pidl != sei->lpIDList) if (pidl != sei->lpIDList)

View file

@ -1708,7 +1708,7 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
DWORD dwAttributes = SFGAO_CANLINK; DWORD dwAttributes = SFGAO_CANLINK;
DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE; DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, (LPCITEMIDLIST*)m_apidl, IID_IDataObject, 0, (LPVOID *)&pda))) if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, (LPCITEMIDLIST*)m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
{ {
IDropSource * pds = (IDropSource *)this; /* own DropSource interface */ IDropSource * pds = (IDropSource *)this; /* own DropSource interface */
@ -2678,8 +2678,7 @@ HRESULT CDefView::drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEf
SendMessageW(m_hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem); SendMessageW(m_hWndList, LVM_GETITEMW, 0, (LPARAM) &lvItem);
/* ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object */ /* ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object */
hr = m_pSFParent->GetUIObjectOf(m_hWndList, 1, hr = m_pSFParent->GetUIObjectOf(m_hWndList, 1, (LPCITEMIDLIST*)&lvItem.lParam, IID_NULL_PPV_ARG(IDropTarget, &m_pCurDropTarget));
(LPCITEMIDLIST*)&lvItem.lParam, IID_IDropTarget, NULL, (LPVOID*)&m_pCurDropTarget);
} }
/* If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state. */ /* If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state. */

View file

@ -27,9 +27,11 @@ extern "C" {
#endif /* defined(__cplusplus) */ #endif /* defined(__cplusplus) */
#ifdef __cplusplus #ifdef __cplusplus
#define IID_PPV_ARG(Itype, ppType) IID_##Itype, reinterpret_cast<void**>((static_cast<Itype**>(ppType))) # define IID_PPV_ARG(Itype, ppType) IID_##Itype, reinterpret_cast<void**>((static_cast<Itype**>(ppType)))
# define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, reinterpret_cast<void**>((static_cast<Itype**>(ppType)))
#else #else
#define IID_PPV_ARG(Itype, ppType) IID_##Itype, (void**)(ppType) # define IID_PPV_ARG(Itype, ppType) IID_##Itype, (void**)(ppType)
# define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, (void**)(ppType)
#endif #endif
/***************************************************************************** /*****************************************************************************