HRESULT WINAPI IShellDispatch_Constructor(IUnknown *outer, REFIID riid, void **ppv) { ShellDispatch *This; HRESULT ret; TRACE("(%p, %s)\n", outer, debugstr_guid(riid)); *ppv = NULL; if (outer) return CLASS_E_NOAGGREGATION; This = HeapAlloc(GetProcessHeap(), 0, sizeof(ShellDispatch)); if (!This) return E_OUTOFMEMORY; This->IShellDispatch2_iface.lpVtbl = &ShellDispatch2Vtbl; This->ref = 1; ret = load_type_info(&IID_IShellDispatch2, &This->typeinfo); if (FAILED(ret)) { HeapFree(GetProcessHeap(), 0, This); return ret; } ret = IShellDispatch2_QueryInterface(&This->IShellDispatch2_iface, riid, ppv); IShellDispatch2_Release(&This->IShellDispatch2_iface); return ret; }
static HRESULT FolderItem_Constructor(VARIANT *dir, FolderItem **ppfi) { FolderItemImpl *This; HRESULT ret; *ppfi = NULL; This = HeapAlloc(GetProcessHeap(), 0, sizeof(FolderItemImpl)); if (!This) return E_OUTOFMEMORY; This->FolderItem_iface.lpVtbl = &FolderItemImpl_Vtbl; This->ref = 1; ret = load_type_info(&IID_FolderItem, &This->iTypeInfo); if (FAILED(ret)) { HeapFree(GetProcessHeap(), 0, This); return ret; } VariantInit(&This->dir); ret = VariantCopy(&This->dir, dir); if (FAILED(ret)) { ITypeInfo_Release(This->iTypeInfo); HeapFree(GetProcessHeap(), 0, This); return E_OUTOFMEMORY; } *ppfi = (FolderItem*)This; return ret; }
static HRESULT WINAPI MsiActiveScriptSite_GetItemInfo(IActiveScriptSite* iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown** ppiunkItem, ITypeInfo** ppti) { MsiActiveScriptSite *This = (MsiActiveScriptSite *)iface; TRACE("(%p/%p)->(%p,%d,%p,%p)\n", This, iface, pstrName, dwReturnMask, ppiunkItem, ppti); /* Determine the kind of pointer that is requested, and make sure placeholder is valid */ if (dwReturnMask & SCRIPTINFO_ITYPEINFO) { if (!ppti) return E_INVALIDARG; *ppti = NULL; } if (dwReturnMask & SCRIPTINFO_IUNKNOWN) { if (!ppiunkItem) return E_INVALIDARG; *ppiunkItem = NULL; } /* Are we looking for the session object? */ if (!strcmpW(szSession, pstrName)) { if (dwReturnMask & SCRIPTINFO_ITYPEINFO) return load_type_info(This->pSession, ppti, &DIID_Session, 0); else if (dwReturnMask & SCRIPTINFO_IUNKNOWN) { IDispatch_QueryInterface(This->pSession, &IID_IUnknown, (void **)ppiunkItem); return S_OK; } } return TYPE_E_ELEMENTNOTFOUND; }
static HRESULT Folder_Constructor(VARIANT *dir, Folder **ppsdf) { FolderImpl *This; HRESULT ret; *ppsdf = NULL; switch (V_VT(dir)) { case VT_I4: /* FIXME: add some checks */ break; case VT_BSTR: if (PathIsDirectoryW(V_BSTR(dir)) && !PathIsRelativeW(V_BSTR(dir)) && PathFileExistsW(V_BSTR(dir))) break; default: return S_FALSE; } This = HeapAlloc(GetProcessHeap(), 0, sizeof(FolderImpl)); if (!This) return E_OUTOFMEMORY; This->Folder_iface.lpVtbl = &FolderImpl_Vtbl; This->ref = 1; ret = load_type_info(&IID_Folder3, &This->iTypeInfo); if (FAILED(ret)) { HeapFree(GetProcessHeap(), 0, This); return ret; } VariantInit(&This->dir); ret = VariantCopy(&This->dir, dir); if (FAILED(ret)) { ITypeInfo_Release(This->iTypeInfo); HeapFree(GetProcessHeap(), 0, This); return E_OUTOFMEMORY; } *ppsdf = (Folder*)This; return ret; }