static HRESULT WINAPI FolderImpl_get_Self(Folder3 *iface, FolderItem **ppfi) { FolderImpl *This = impl_from_Folder(iface); TRACE("(%p,%p)\n", iface, ppfi); return FolderItem_Constructor(&This->dir, ppfi); }
static ULONG WINAPI FolderImpl_AddRef(Folder3 *iface) { FolderImpl *This = impl_from_Folder(iface); ULONG ref = InterlockedIncrement(&This->ref); TRACE("(%p), new refcount=%i\n", iface, ref); return ref; }
static HRESULT WINAPI FolderImpl_GetIDsOfNames(Folder3 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { FolderImpl *This = impl_from_Folder(iface); TRACE("(%p,%p,%p,%u,%d,%p)\n", iface, riid, rgszNames, cNames, lcid, rgDispId); return ITypeInfo_GetIDsOfNames(This->iTypeInfo, rgszNames, cNames, rgDispId); }
static HRESULT WINAPI FolderImpl_GetTypeInfo(Folder3 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { FolderImpl *This = impl_from_Folder(iface); TRACE("(%p,%u,%d,%p)\n", iface, iTInfo, lcid, ppTInfo); ITypeInfo_AddRef(This->iTypeInfo); *ppTInfo = This->iTypeInfo; return S_OK; }
static HRESULT WINAPI FolderImpl_Invoke(Folder3 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { FolderImpl *This = impl_from_Folder(iface); TRACE("(%p,%d,%p,%d,%u,%p,%p,%p,%p)\n", iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); return ITypeInfo_Invoke(This->iTypeInfo, This, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); }
static ULONG WINAPI FolderImpl_Release(Folder3 *iface) { FolderImpl *This = impl_from_Folder(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p), new refcount=%i\n", iface, ref); if (!ref) { VariantClear(&This->dir); HeapFree(GetProcessHeap(), 0, This); } return ref; }
static HRESULT WINAPI FolderImpl_Invoke(Folder3 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { FolderImpl *This = impl_from_Folder(iface); ITypeInfo *ti; HRESULT hr; TRACE("(%p,%d,%p,%d,%u,%p,%p,%p,%p)\n", iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); hr = get_typeinfo(Folder3_tid, &ti); if (SUCCEEDED(hr)) hr = ITypeInfo_Invoke(ti, This, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); return hr; }
static HRESULT WINAPI FolderImpl_get_Title(Folder3 *iface, BSTR *pbs) { FolderImpl *This = impl_from_Folder(iface); WCHAR *p; int len; TRACE("(%p,%p)\n", iface, pbs); *pbs = NULL; if (V_VT(&This->dir) == VT_I4) { FIXME("special folder constants are not supported\n"); return E_NOTIMPL; } p = PathFindFileNameW(V_BSTR(&This->dir)); len = lstrlenW(p); *pbs = SysAllocStringLen(p, p[len - 1] == '\\' ? len - 1 : len); return *pbs ? S_OK : E_OUTOFMEMORY; }
static HRESULT WINAPI FolderImpl_QueryInterface(Folder3 *iface, REFIID riid, LPVOID *ppv) { FolderImpl *This = impl_from_Folder(iface); TRACE("(%p,%p,%p)\n", iface, riid, ppv); if (!ppv) return E_INVALIDARG; if (IsEqualIID(&IID_IUnknown, riid) || IsEqualIID(&IID_IDispatch, riid) || IsEqualIID(&IID_Folder, riid) || IsEqualIID(&IID_Folder2, riid) || IsEqualIID(&IID_Folder3, riid)) *ppv = This; else { FIXME("not implemented for %s\n", shdebugstr_guid(riid)); *ppv = NULL; return E_NOINTERFACE; } IUnknown_AddRef((IUnknown*)*ppv); return S_OK; }