[SHELL32][SHELL32_WINETEST] Connect CDefViewDual to CDefView to fix crashes in the shelldispatch test ROSTESTS-209

- CDefViewDual::get_Application now returns a new CDefView to fix the winetest.
- Update CFolder, CFolderItem(s), CFolderItemVerb(s), CShell to use the new IDispatchImpl
- Enable the last two skipped testcases (test_ShellFolderViewDual, test_ShellWindows)

svn path=/trunk/; revision=71144
This commit is contained in:
Mark Jansen 2016-04-11 18:28:31 +00:00
parent 1591074c3f
commit 57c45625a3
11 changed files with 118 additions and 236 deletions

View file

@ -46,9 +46,8 @@ class CDefViewDual :
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **app) override virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **app) override
{ {
if (!app) return E_INVALIDARG; if (!app) return E_INVALIDARG;
*app = NULL;
FIXME("CDefViewDual::get_Application is UNIMPLEMENTED (%p, %p)\n", this, app); return CShell_Constructor(IID_IDispatch, (LPVOID*)app);
return E_NOTIMPL;
} }
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **parent) override virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **parent) override

View file

@ -36,38 +36,30 @@ void CFolder::Init(LPITEMIDLIST idlist)
m_idlist.Attach(idlist); m_idlist.Attach(idlist);
} }
// *** IDispatch methods *** HRESULT CFolder::GetShellFolder(CComPtr<IShellFolder>& psfCurrent)
HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfoCount(UINT *pctinfo)
{ {
TRACE("(%p, %p)\n", this, pctinfo); CComPtr<IShellFolder> psfDesktop;
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) HRESULT hr = SHGetDesktopFolder(&psfDesktop);
{ if (FAILED_UNEXPECTEDLY(hr))
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo); return hr;
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolder::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) return psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent));
{
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE CFolder::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
}
// *** Folder methods *** // *** Folder methods ***
HRESULT STDMETHODCALLTYPE CFolder::get_Title(BSTR *pbs) HRESULT STDMETHODCALLTYPE CFolder::get_Title(BSTR *pbs)
{ {
TRACE("(%p, %p)\n", this, pbs); if (!pbs)
return E_NOTIMPL; return E_POINTER;
WCHAR path[MAX_PATH+2] = {0};
HRESULT hr = ILGetDisplayNameExW(NULL, m_idlist, path, ILGDN_INFOLDER);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
*pbs = SysAllocString(path);
return S_OK;
} }
HRESULT STDMETHODCALLTYPE CFolder::get_Application(IDispatch **ppid) HRESULT STDMETHODCALLTYPE CFolder::get_Application(IDispatch **ppid)
@ -97,15 +89,12 @@ HRESULT STDMETHODCALLTYPE CFolder::Items(FolderItems **ppid)
HRESULT STDMETHODCALLTYPE CFolder::ParseName(BSTR bName, FolderItem **ppid) HRESULT STDMETHODCALLTYPE CFolder::ParseName(BSTR bName, FolderItem **ppid)
{ {
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid); TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid);
if (!ppid)
CComPtr<IShellFolder> psfDesktop; return E_POINTER;
*ppid = NULL;
HRESULT hr = SHGetDesktopFolder(&psfDesktop);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
CComPtr<IShellFolder> psfCurrent; CComPtr<IShellFolder> psfCurrent;
hr = psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent)); HRESULT hr = GetShellFolder(psfCurrent);
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return hr; return hr;

View file

@ -25,9 +25,11 @@
class CFolder: class CFolder:
public CComCoClass<CFolder>, public CComCoClass<CFolder>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
public Folder2 public IDispatchImpl<Folder2, &IID_Folder2>
{ {
private: private:
HRESULT GetShellFolder(CComPtr<IShellFolder>& psfCurrent);
CComHeapPtr<ITEMIDLIST> m_idlist; CComHeapPtr<ITEMIDLIST> m_idlist;
public: public:
@ -36,13 +38,6 @@ public:
void Init(LPITEMIDLIST idlist); void Init(LPITEMIDLIST idlist);
// *** IDispatch methods ***
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
// *** Folder methods *** // *** Folder methods ***
virtual HRESULT STDMETHODCALLTYPE get_Title(BSTR *pbs); virtual HRESULT STDMETHODCALLTYPE get_Title(BSTR *pbs);
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);

View file

@ -31,35 +31,10 @@ CFolderItemVerb::~CFolderItemVerb()
{ {
} }
//void CFolderItemVerb::Init(LPITEMIDLIST idlist) void CFolderItemVerb::Init(IContextMenu* menu, BSTR name)
//{
// m_idlist.Attach(idlist);
//}
// *** IDispatch methods ***
HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetTypeInfoCount(UINT *pctinfo)
{ {
TRACE("(%p, %p)\n", this, pctinfo); m_contextmenu = menu;
return E_NOTIMPL; m_name.m_str = name;
}
HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
{
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItemVerb::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
} }
// *** FolderItemVerb methods *** // *** FolderItemVerb methods ***
@ -78,12 +53,10 @@ HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Parent(IDispatch **ppid)
HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Name(BSTR *pbs) HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Name(BSTR *pbs)
{ {
TRACE("(%p, %p)\n", this, pbs);
if (!pbs) if (!pbs)
return E_POINTER; return E_POINTER;
// Terminating item: *pbs = SysAllocString(m_name);
*pbs = SysAllocString(L""); return S_OK;
return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE CFolderItemVerb::DoIt() HRESULT STDMETHODCALLTYPE CFolderItemVerb::DoIt()
@ -98,52 +71,45 @@ HRESULT STDMETHODCALLTYPE CFolderItemVerb::DoIt()
CFolderItemVerbs::CFolderItemVerbs() CFolderItemVerbs::CFolderItemVerbs()
:m_menu(NULL)
,m_count(0)
{ {
} }
CFolderItemVerbs::~CFolderItemVerbs() CFolderItemVerbs::~CFolderItemVerbs()
{ {
DestroyMenu(m_menu);
} }
//void CFolderItemVerbs::Init(LPITEMIDLIST idlist) HRESULT CFolderItemVerbs::Init(LPITEMIDLIST idlist)
//{
// m_idlist.Attach(idlist);
//}
// *** IDispatch methods ***
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetTypeInfoCount(UINT *pctinfo)
{ {
TRACE("(%p, %p)\n", this, pctinfo); CComPtr<IShellFolder> folder;
return E_NOTIMPL; LPCITEMIDLIST child;
HRESULT hr = SHBindToParent(idlist, IID_PPV_ARG(IShellFolder, &folder), &child);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
hr = folder->GetUIObjectOf(NULL, 1, &child, IID_IContextMenu, NULL, (PVOID*)&m_contextmenu);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
m_menu = CreatePopupMenu();
hr = m_contextmenu->QueryContextMenu(m_menu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, CMF_NORMAL);
if (!SUCCEEDED(hr))
return hr;
m_count = GetMenuItemCount(m_menu);
return hr;
} }
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
{
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
}
// *** FolderItemVerbs methods *** // *** FolderItemVerbs methods ***
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Count(LONG *plCount) HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Count(LONG *plCount)
{ {
TRACE("(%p, %p)\n", this, plCount);
if (!plCount) if (!plCount)
return E_POINTER; return E_POINTER;
*plCount = 0; *plCount = m_count;
return E_NOTIMPL; return S_OK;
} }
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Application(IDispatch **ppid) HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Application(IDispatch **ppid)
@ -158,18 +124,51 @@ HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Parent(IDispatch **ppid)
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::Item(VARIANT index, FolderItemVerb **ppid) HRESULT STDMETHODCALLTYPE CFolderItemVerbs::Item(VARIANT indexVar, FolderItemVerb **ppid)
{ {
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_variant(&index), ppid);
if (!ppid) if (!ppid)
return E_POINTER; return E_POINTER;
/* FIXME! */ CComVariant var;
VariantCopyInd(&var, &indexVar);
HRESULT hr = VariantChangeType(&var, &var, 0, VT_I4);
if (FAILED_UNEXPECTEDLY(hr))
return E_INVALIDARG;
int index = V_I4(&var);
if (index > m_count)
return S_OK;
BSTR name = NULL;
if(index == m_count)
name = SysAllocStringLen(NULL, 0);
else
{
MENUITEMINFOW info = { sizeof(info), 0 };
info.fMask = MIIM_STRING;
if (!GetMenuItemInfoW(m_menu, index, TRUE, &info))
return E_FAIL;
name = SysAllocStringLen(NULL, info.cch);
if (name)
{
info.dwTypeData = name;
info.cch++;
GetMenuItemInfoW(m_menu, index, TRUE, &info);
}
}
if (!name)
return E_OUTOFMEMORY;
CFolderItemVerb* verb = new CComObject<CFolderItemVerb>(); CFolderItemVerb* verb = new CComObject<CFolderItemVerb>();
verb->Init(m_contextmenu, name);
verb->AddRef(); verb->AddRef();
*ppid = verb; *ppid = verb;
return E_NOTIMPL; return S_OK;
} }
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::_NewEnum(IUnknown **ppunk) HRESULT STDMETHODCALLTYPE CFolderItemVerbs::_NewEnum(IUnknown **ppunk)

View file

@ -24,22 +24,17 @@
class CFolderItemVerb: class CFolderItemVerb:
public CComCoClass<CFolderItemVerb>, public CComCoClass<CFolderItemVerb>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
public FolderItemVerb public IDispatchImpl<FolderItemVerb, &IID_FolderItemVerb>
{ {
private: private:
CComPtr<IContextMenu> m_contextmenu;
CComBSTR m_name;
public: public:
CFolderItemVerb(); CFolderItemVerb();
~CFolderItemVerb(); ~CFolderItemVerb();
//void Init(LPITEMIDLIST idlist); void Init(IContextMenu* menu, BSTR name);
// *** IDispatch methods ***
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
// *** FolderItemVerb methods *** // *** FolderItemVerb methods ***
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
@ -61,22 +56,18 @@ END_COM_MAP()
class CFolderItemVerbs: class CFolderItemVerbs:
public CComCoClass<CFolderItemVerbs>, public CComCoClass<CFolderItemVerbs>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
public FolderItemVerbs public IDispatchImpl<FolderItemVerbs, &IID_FolderItemVerbs>
{ {
private: private:
CComPtr<IContextMenu> m_contextmenu;
HMENU m_menu;
int m_count;
public: public:
CFolderItemVerbs(); CFolderItemVerbs();
~CFolderItemVerbs(); virtual ~CFolderItemVerbs();
//void Init(LPITEMIDLIST idlist); HRESULT Init(LPITEMIDLIST idlist);
// *** IDispatch methods ***
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
// *** FolderItemVerbs methods *** // *** FolderItemVerbs methods ***
virtual HRESULT STDMETHODCALLTYPE get_Count(LONG *plCount); virtual HRESULT STDMETHODCALLTYPE get_Count(LONG *plCount);

View file

@ -36,32 +36,6 @@ void CFolderItem::Init(LPITEMIDLIST idlist)
m_idlist.Attach(idlist); m_idlist.Attach(idlist);
} }
// *** IDispatch methods ***
HRESULT STDMETHODCALLTYPE CFolderItem::GetTypeInfoCount(UINT *pctinfo)
{
TRACE("(%p, %p)\n", this, pctinfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItem::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
{
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItem::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItem::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
}
// *** FolderItem methods *** // *** FolderItem methods ***
HRESULT STDMETHODCALLTYPE CFolderItem::get_Application(IDispatch **ppid) HRESULT STDMETHODCALLTYPE CFolderItem::get_Application(IDispatch **ppid)
{ {
@ -165,9 +139,15 @@ HRESULT STDMETHODCALLTYPE CFolderItem::get_Type(BSTR *pbs)
HRESULT STDMETHODCALLTYPE CFolderItem::Verbs(FolderItemVerbs **ppfic) HRESULT STDMETHODCALLTYPE CFolderItem::Verbs(FolderItemVerbs **ppfic)
{ {
if(!ppfic) if (!ppfic)
return E_POINTER; return E_POINTER;
CFolderItemVerbs* verbs = new CComObject<CFolderItemVerbs>(); CFolderItemVerbs* verbs = new CComObject<CFolderItemVerbs>();
HRESULT hr = verbs->Init(m_idlist);
if (FAILED_UNEXPECTEDLY(hr))
{
delete verbs;
return hr;
}
verbs->AddRef(); verbs->AddRef();
*ppfic = verbs; *ppfic = verbs;
return S_OK; return S_OK;
@ -181,8 +161,6 @@ HRESULT STDMETHODCALLTYPE CFolderItem::InvokeVerb(VARIANT vVerb)
CFolderItems::CFolderItems() CFolderItems::CFolderItems()
{ {
} }
@ -191,32 +169,6 @@ CFolderItems::~CFolderItems()
{ {
} }
// *** IDispatch methods ***
HRESULT STDMETHODCALLTYPE CFolderItems::GetTypeInfoCount(UINT *pctinfo)
{
TRACE("(%p, %p)\n", this, pctinfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItems::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
{
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItems::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CFolderItems::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
}
// *** FolderItems methods *** // *** FolderItems methods ***
HRESULT STDMETHODCALLTYPE CFolderItems::get_Count(long *plCount) HRESULT STDMETHODCALLTYPE CFolderItems::get_Count(long *plCount)
{ {

View file

@ -25,7 +25,7 @@
class CFolderItem: class CFolderItem:
public CComCoClass<CFolderItem>, public CComCoClass<CFolderItem>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
public FolderItem public IDispatchImpl<FolderItem, &IID_FolderItem>
{ {
private: private:
CComHeapPtr<ITEMIDLIST> m_idlist; CComHeapPtr<ITEMIDLIST> m_idlist;
@ -37,12 +37,6 @@ public:
void Init(LPITEMIDLIST idlist); void Init(LPITEMIDLIST idlist);
// *** IDispatch methods ***
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
// *** FolderItem methods *** // *** FolderItem methods ***
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
@ -75,7 +69,7 @@ END_COM_MAP()
class CFolderItems: class CFolderItems:
public CComCoClass<CFolderItems>, public CComCoClass<CFolderItems>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
public FolderItems public IDispatchImpl<FolderItems, &IID_FolderItems>
{ {
private: private:
@ -83,12 +77,6 @@ public:
CFolderItems(); CFolderItems();
~CFolderItems(); ~CFolderItems();
// *** IDispatch methods ***
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
// *** FolderItems methods *** // *** FolderItems methods ***
virtual HRESULT STDMETHODCALLTYPE get_Count(long *plCount); virtual HRESULT STDMETHODCALLTYPE get_Count(long *plCount);
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);

View file

@ -31,34 +31,11 @@ CShell::~CShell()
{ {
} }
HRESULT CShell::Initialize()
// *** IDispatch methods ***
HRESULT STDMETHODCALLTYPE CShell::GetTypeInfoCount(UINT *pctinfo)
{ {
TRACE("(%p, %p)\n", this, pctinfo); return S_OK;
return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE CShell::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
{
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CShell::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CShell::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
}
// *** IShellDispatch methods *** // *** IShellDispatch methods ***
HRESULT STDMETHODCALLTYPE CShell::get_Application(IDispatch **ppid) HRESULT STDMETHODCALLTYPE CShell::get_Application(IDispatch **ppid)
{ {
@ -341,4 +318,8 @@ HRESULT STDMETHODCALLTYPE CShell::GetSite(REFIID riid, PVOID *ppvSite)
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT WINAPI CShell_Constructor(REFIID riid, LPVOID * ppvOut)
{
return ShellObjectCreatorInit<CShell>(riid, ppvOut);
}

View file

@ -26,7 +26,7 @@
class CShell: class CShell:
public CComCoClass<CShell, &CLSID_Shell>, public CComCoClass<CShell, &CLSID_Shell>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
public IShellDispatch4, public IDispatchImpl<IShellDispatch4, &IID_IShellDispatch4>,
public IObjectSafety, public IObjectSafety,
public IObjectWithSite public IObjectWithSite
{ {
@ -36,11 +36,7 @@ public:
CShell(); CShell();
~CShell(); ~CShell();
// *** IDispatch methods *** HRESULT Initialize();
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
// *** IShellDispatch methods *** // *** IShellDispatch methods ***
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);

View file

@ -72,6 +72,7 @@ IContextMenu2 * ISvBgCm_Constructor(LPSHELLFOLDER pSFParent, BOOL bDesktop);
HRESULT WINAPI IShellView_Constructor(IShellFolder *pFolder, IShellView **newView); HRESULT WINAPI IShellView_Constructor(IShellFolder *pFolder, IShellView **newView);
HRESULT WINAPI CDefView_Constructor(IShellFolder *pFolder, REFIID riid, LPVOID * ppvOut); HRESULT WINAPI CDefView_Constructor(IShellFolder *pFolder, REFIID riid, LPVOID * ppvOut);
HRESULT WINAPI CDefViewDual_Constructor(REFIID riid, LPVOID * ppvOut); HRESULT WINAPI CDefViewDual_Constructor(REFIID riid, LPVOID * ppvOut);
HRESULT WINAPI CShell_Constructor(REFIID riid, LPVOID * ppvOut);
HRESULT WINAPI IShellLink_ConstructFromFile(IUnknown * pUnkOuter, REFIID riid, LPCITEMIDLIST pidl, LPVOID * ppv); HRESULT WINAPI IShellLink_ConstructFromFile(IUnknown * pUnkOuter, REFIID riid, LPCITEMIDLIST pidl, LPVOID * ppv);
HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV); HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV);

View file

@ -880,17 +880,8 @@ START_TEST(shelldispatch)
init_function_pointers(); init_function_pointers();
test_namespace(); test_namespace();
test_service(); test_service();
#ifdef __REACTOS__
if (!winetest_interactive)
skip("ROSTESTS-209: Skipping test_ShellFolderViewDual() and test_ShellWindows().\n");
else
{
#endif
test_ShellFolderViewDual(); test_ShellFolderViewDual();
test_ShellWindows(); test_ShellWindows();
#ifdef __REACTOS__
}
#endif
test_ParseName(); test_ParseName();
test_Verbs(); test_Verbs();