| /* |
| * Implementation of IProvideClassInfo interfaces for IE Web Browser control |
| * |
| * Copyright 2001 John R. Sheets (for CodeWeavers) |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| |
| #include <stdarg.h> |
| #include <string.h> |
| |
| #include "windef.h" |
| #include "winbase.h" |
| #include "shdocvw.h" |
| #include "wine/debug.h" |
| |
| WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); |
| |
| /********************************************************************** |
| * Implement the IProvideClassInfo interface |
| * |
| * FIXME: Should we just pass in the IProvideClassInfo2 methods rather |
| * reimplementing them here? |
| */ |
| |
| static HRESULT WINAPI WBPCI_QueryInterface(LPPROVIDECLASSINFO iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| ICOM_THIS(IProvideClassInfoImpl, iface); |
| |
| FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); |
| return E_NOINTERFACE; |
| } |
| |
| static ULONG WINAPI WBPCI_AddRef(LPPROVIDECLASSINFO iface) |
| { |
| ICOM_THIS(IProvideClassInfoImpl, iface); |
| |
| TRACE("\n"); |
| return ++(This->ref); |
| } |
| |
| static ULONG WINAPI WBPCI_Release(LPPROVIDECLASSINFO iface) |
| { |
| ICOM_THIS(IProvideClassInfoImpl, iface); |
| |
| /* static class, won't be freed */ |
| TRACE("\n"); |
| return --(This->ref); |
| } |
| |
| /* Return an ITypeInfo interface to retrieve type library info about |
| * this control. |
| */ |
| static HRESULT WINAPI WBPCI_GetClassInfo(LPPROVIDECLASSINFO iface, LPTYPEINFO *ppTI) |
| { |
| FIXME("stub: LPTYPEINFO = %p\n", *ppTI); |
| return S_OK; |
| } |
| |
| /********************************************************************** |
| * IProvideClassInfo virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IProvideClassInfo) WBPCI_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBPCI_QueryInterface, |
| WBPCI_AddRef, |
| WBPCI_Release, |
| WBPCI_GetClassInfo |
| }; |
| |
| IProvideClassInfoImpl SHDOCVW_ProvideClassInfo = { &WBPCI_Vtbl, 1 }; |
| |
| |
| /********************************************************************** |
| * Implement the IProvideClassInfo2 interface (inherits from |
| * IProvideClassInfo). |
| */ |
| |
| static HRESULT WINAPI WBPCI2_QueryInterface(LPPROVIDECLASSINFO2 iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| ICOM_THIS(IProvideClassInfo2Impl, iface); |
| |
| FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); |
| return E_NOINTERFACE; |
| } |
| |
| static ULONG WINAPI WBPCI2_AddRef(LPPROVIDECLASSINFO2 iface) |
| { |
| ICOM_THIS(IProvideClassInfo2Impl, iface); |
| |
| TRACE("\n"); |
| return ++(This->ref); |
| } |
| |
| static ULONG WINAPI WBPCI2_Release(LPPROVIDECLASSINFO2 iface) |
| { |
| ICOM_THIS(IProvideClassInfo2Impl, iface); |
| |
| /* static class, won't be freed */ |
| TRACE("\n"); |
| return --(This->ref); |
| } |
| |
| /* Return an ITypeInfo interface to retrieve type library info about |
| * this control. |
| */ |
| static HRESULT WINAPI WBPCI2_GetClassInfo(LPPROVIDECLASSINFO2 iface, LPTYPEINFO *ppTI) |
| { |
| FIXME("stub: LPTYPEINFO = %p\n", *ppTI); |
| return S_OK; |
| } |
| |
| /* Get the IID for generic default event callbacks. This IID will |
| * in theory be used to later query for an IConnectionPoint to connect |
| * an event sink (callback implementation in the OLE control site) |
| * to this control. |
| */ |
| static HRESULT WINAPI WBPCI2_GetGUID(LPPROVIDECLASSINFO2 iface, |
| DWORD dwGuidKind, GUID *pGUID) |
| { |
| FIXME("stub: dwGuidKind = %ld, pGUID = %s\n", dwGuidKind, debugstr_guid(pGUID)); |
| |
| if (dwGuidKind != GUIDKIND_DEFAULT_SOURCE_DISP_IID) |
| { |
| FIXME ("Requested unsupported GUID type: %ld\n", dwGuidKind); |
| return E_FAIL; /* Is there a better return type here? */ |
| } |
| |
| /* FIXME: Returning IPropertyNotifySink interface, but should really |
| * return a more generic event set (???) dispinterface. |
| * However, this hack, allows a control site to return with success |
| * (MFC's COleControlSite falls back to older IProvideClassInfo interface |
| * if GetGUID() fails to return a non-NULL GUID). |
| */ |
| memcpy(pGUID, &IID_IPropertyNotifySink, sizeof(GUID)); |
| FIXME("Wrongly returning IPropertyNotifySink interface %s\n", |
| debugstr_guid(pGUID)); |
| |
| return S_OK; |
| } |
| |
| /********************************************************************** |
| * IProvideClassInfo virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IProvideClassInfo2) WBPCI2_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBPCI2_QueryInterface, |
| WBPCI2_AddRef, |
| WBPCI2_Release, |
| WBPCI2_GetClassInfo, |
| WBPCI2_GetGUID |
| }; |
| |
| IProvideClassInfo2Impl SHDOCVW_ProvideClassInfo2 = { &WBPCI2_Vtbl, 1 }; |