Index: dll/win32/shell32/CDefViewDual.cpp =================================================================== --- dll/win32/shell32/CDefViewDual.cpp (revision 71143) +++ dll/win32/shell32/CDefViewDual.cpp (working copy) @@ -46,9 +46,8 @@ virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **app) override { if (!app) return E_INVALIDARG; - *app = NULL; - FIXME("CDefViewDual::get_Application is UNIMPLEMENTED (%p, %p)\n", this, app); - return E_NOTIMPL; + + return CShell_Constructor(IID_IDispatch, (LPVOID*)app); } virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **parent) override Index: dll/win32/shell32/CFolder.cpp =================================================================== --- dll/win32/shell32/CFolder.cpp (revision 71143) +++ dll/win32/shell32/CFolder.cpp (working copy) @@ -36,38 +36,30 @@ m_idlist.Attach(idlist); } -// *** IDispatch methods *** -HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfoCount(UINT *pctinfo) +HRESULT CFolder::GetShellFolder(CComPtr& psfCurrent) { - TRACE("(%p, %p)\n", this, pctinfo); - return E_NOTIMPL; -} + CComPtr psfDesktop; -HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) -{ - TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo); - return E_NOTIMPL; -} + HRESULT hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; -HRESULT STDMETHODCALLTYPE CFolder::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; + return psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent)); } -HRESULT STDMETHODCALLTYPE CFolder::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +// *** Folder methods *** +HRESULT STDMETHODCALLTYPE CFolder::get_Title(BSTR *pbs) { - 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; -} + if (!pbs) + return E_POINTER; + WCHAR path[MAX_PATH+2] = {0}; + HRESULT hr = ILGetDisplayNameExW(NULL, m_idlist, path, ILGDN_INFOLDER); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; -// *** Folder methods *** -HRESULT STDMETHODCALLTYPE CFolder::get_Title(BSTR *pbs) -{ - TRACE("(%p, %p)\n", this, pbs); - return E_NOTIMPL; + *pbs = SysAllocString(path); + return S_OK; } HRESULT STDMETHODCALLTYPE CFolder::get_Application(IDispatch **ppid) @@ -97,15 +89,12 @@ HRESULT STDMETHODCALLTYPE CFolder::ParseName(BSTR bName, FolderItem **ppid) { TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid); + if (!ppid) + return E_POINTER; + *ppid = NULL; - CComPtr psfDesktop; - - HRESULT hr = SHGetDesktopFolder(&psfDesktop); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - CComPtr psfCurrent; - hr = psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent)); + HRESULT hr = GetShellFolder(psfCurrent); if (FAILED_UNEXPECTEDLY(hr)) return hr; Index: dll/win32/shell32/CFolder.h =================================================================== --- dll/win32/shell32/CFolder.h (revision 71143) +++ dll/win32/shell32/CFolder.h (working copy) @@ -25,9 +25,11 @@ class CFolder: public CComCoClass, public CComObjectRootEx, - public Folder2 + public IDispatchImpl { private: + HRESULT GetShellFolder(CComPtr& psfCurrent); + CComHeapPtr m_idlist; public: @@ -36,13 +38,6 @@ 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 *** virtual HRESULT STDMETHODCALLTYPE get_Title(BSTR *pbs); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); Index: dll/win32/shell32/CFolderItems.cpp =================================================================== --- dll/win32/shell32/CFolderItems.cpp (revision 71143) +++ dll/win32/shell32/CFolderItems.cpp (working copy) @@ -36,32 +36,6 @@ 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 *** HRESULT STDMETHODCALLTYPE CFolderItem::get_Application(IDispatch **ppid) { @@ -165,9 +139,15 @@ HRESULT STDMETHODCALLTYPE CFolderItem::Verbs(FolderItemVerbs **ppfic) { - if(!ppfic) + if (!ppfic) return E_POINTER; CFolderItemVerbs* verbs = new CComObject(); + HRESULT hr = verbs->Init(m_idlist); + if (FAILED_UNEXPECTEDLY(hr)) + { + delete verbs; + return hr; + } verbs->AddRef(); *ppfic = verbs; return S_OK; @@ -181,8 +161,6 @@ - - CFolderItems::CFolderItems() { } @@ -191,32 +169,6 @@ { } -// *** 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 *** HRESULT STDMETHODCALLTYPE CFolderItems::get_Count(long *plCount) { Index: dll/win32/shell32/CFolderItems.h =================================================================== --- dll/win32/shell32/CFolderItems.h (revision 71143) +++ dll/win32/shell32/CFolderItems.h (working copy) @@ -25,7 +25,7 @@ class CFolderItem: public CComCoClass, public CComObjectRootEx, - public FolderItem + public IDispatchImpl { private: CComHeapPtr m_idlist; @@ -37,12 +37,6 @@ 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 *** virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid); @@ -75,7 +69,7 @@ class CFolderItems: public CComCoClass, public CComObjectRootEx, - public FolderItems + public IDispatchImpl { private: @@ -83,12 +77,6 @@ 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 *** virtual HRESULT STDMETHODCALLTYPE get_Count(long *plCount); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); Index: dll/win32/shell32/CFolderItemVerbs.cpp =================================================================== --- dll/win32/shell32/CFolderItemVerbs.cpp (revision 71143) +++ dll/win32/shell32/CFolderItemVerbs.cpp (working copy) @@ -31,37 +31,12 @@ { } -//void CFolderItemVerb::Init(LPITEMIDLIST idlist) -//{ -// m_idlist.Attach(idlist); -//} - -// *** IDispatch methods *** -HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetTypeInfoCount(UINT *pctinfo) +void CFolderItemVerb::Init(IContextMenu* menu, BSTR name) { - TRACE("(%p, %p)\n", this, pctinfo); - return E_NOTIMPL; + m_contextmenu = menu; + 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 *** HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Application(IDispatch **ppid) @@ -78,12 +53,10 @@ HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Name(BSTR *pbs) { - TRACE("(%p, %p)\n", this, pbs); if (!pbs) return E_POINTER; - // Terminating item: - *pbs = SysAllocString(L""); - return E_NOTIMPL; + *pbs = SysAllocString(m_name); + return S_OK; } HRESULT STDMETHODCALLTYPE CFolderItemVerb::DoIt() @@ -98,52 +71,45 @@ CFolderItemVerbs::CFolderItemVerbs() + :m_menu(NULL) + ,m_count(0) { } CFolderItemVerbs::~CFolderItemVerbs() { + DestroyMenu(m_menu); } -//void CFolderItemVerbs::Init(LPITEMIDLIST idlist) -//{ -// m_idlist.Attach(idlist); -//} - -// *** IDispatch methods *** -HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetTypeInfoCount(UINT *pctinfo) +HRESULT CFolderItemVerbs::Init(LPITEMIDLIST idlist) { - TRACE("(%p, %p)\n", this, pctinfo); - return E_NOTIMPL; -} + CComPtr folder; + LPCITEMIDLIST child; + HRESULT hr = SHBindToParent(idlist, IID_PPV_ARG(IShellFolder, &folder), &child); + if (FAILED_UNEXPECTEDLY(hr)) + 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; -} + hr = folder->GetUIObjectOf(NULL, 1, &child, IID_IContextMenu, NULL, (PVOID*)&m_contextmenu); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; -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; -} + m_menu = CreatePopupMenu(); + hr = m_contextmenu->QueryContextMenu(m_menu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, CMF_NORMAL); + if (!SUCCEEDED(hr)) + return hr; -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; + m_count = GetMenuItemCount(m_menu); + return hr; } + // *** FolderItemVerbs methods *** HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Count(LONG *plCount) { - TRACE("(%p, %p)\n", this, plCount); if (!plCount) return E_POINTER; - *plCount = 0; - return E_NOTIMPL; + *plCount = m_count; + return S_OK; } HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Application(IDispatch **ppid) @@ -158,18 +124,51 @@ 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) 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(); + verb->Init(m_contextmenu, name); verb->AddRef(); *ppid = verb; - return E_NOTIMPL; + return S_OK; } HRESULT STDMETHODCALLTYPE CFolderItemVerbs::_NewEnum(IUnknown **ppunk) Index: dll/win32/shell32/CFolderItemVerbs.h =================================================================== --- dll/win32/shell32/CFolderItemVerbs.h (revision 71143) +++ dll/win32/shell32/CFolderItemVerbs.h (working copy) @@ -24,23 +24,18 @@ class CFolderItemVerb: public CComCoClass, public CComObjectRootEx, - public FolderItemVerb + public IDispatchImpl { private: + CComPtr m_contextmenu; + CComBSTR m_name; public: 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 *** virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid); @@ -61,23 +56,19 @@ class CFolderItemVerbs: public CComCoClass, public CComObjectRootEx, - public FolderItemVerbs + public IDispatchImpl { private: + CComPtr m_contextmenu; + HMENU m_menu; + int m_count; public: 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 *** virtual HRESULT STDMETHODCALLTYPE get_Count(LONG *plCount); virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); Index: dll/win32/shell32/CShell.cpp =================================================================== --- dll/win32/shell32/CShell.cpp (revision 71143) +++ dll/win32/shell32/CShell.cpp (working copy) @@ -31,34 +31,11 @@ { } - -// *** IDispatch methods *** -HRESULT STDMETHODCALLTYPE CShell::GetTypeInfoCount(UINT *pctinfo) +HRESULT CShell::Initialize() { - TRACE("(%p, %p)\n", this, pctinfo); - return E_NOTIMPL; + return S_OK; } -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 *** HRESULT STDMETHODCALLTYPE CShell::get_Application(IDispatch **ppid) { @@ -341,4 +318,8 @@ return E_NOTIMPL; } +HRESULT WINAPI CShell_Constructor(REFIID riid, LPVOID * ppvOut) +{ + return ShellObjectCreatorInit(riid, ppvOut); +} Index: dll/win32/shell32/CShell.h =================================================================== --- dll/win32/shell32/CShell.h (revision 71143) +++ dll/win32/shell32/CShell.h (working copy) @@ -26,7 +26,7 @@ class CShell: public CComCoClass, public CComObjectRootEx, - public IShellDispatch4, + public IDispatchImpl, public IObjectSafety, public IObjectWithSite { @@ -36,11 +36,7 @@ CShell(); ~CShell(); - // *** 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); + HRESULT Initialize(); // *** IShellDispatch methods *** virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid); Index: dll/win32/shell32/wine/shell32_main.h =================================================================== --- dll/win32/shell32/wine/shell32_main.h (revision 71143) +++ dll/win32/shell32/wine/shell32_main.h (working copy) @@ -72,6 +72,7 @@ HRESULT WINAPI IShellView_Constructor(IShellFolder *pFolder, IShellView **newView); HRESULT WINAPI CDefView_Constructor(IShellFolder *pFolder, 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 IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV);