Piotr Caban : msxml3: Add IVBSAXLocator implementation.

Alexandre Julliard julliard at winehq.org
Fri Aug 1 05:33:49 CDT 2008


Module: wine
Branch: master
Commit: d439ca5e2a8696b23257352c0dfc455b1aa56dde
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d439ca5e2a8696b23257352c0dfc455b1aa56dde

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Thu Jul 31 16:48:11 2008 +0200

msxml3: Add IVBSAXLocator implementation.

---

 dlls/msxml3/saxreader.c |  181 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 181 insertions(+), 0 deletions(-)

diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index cfee18d..a938e6b 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -1130,6 +1130,186 @@ void libxmlFatalError(void *ctx, const char *msg, ...)
     This->ret = E_FAIL;
 }
 
+/*** IVBSAXLocator interface ***/
+/*** IUnknown methods ***/
+static HRESULT WINAPI ivbsaxlocator_QueryInterface(IVBSAXLocator* iface, REFIID riid, void **ppvObject)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+
+    TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject);
+
+    *ppvObject = NULL;
+
+    if ( IsEqualGUID( riid, &IID_IUnknown ) ||
+            IsEqualGUID( riid, &IID_IDispatch) ||
+            IsEqualGUID( riid, &IID_IVBSAXLocator ))
+    {
+        *ppvObject = iface;
+    }
+    else
+    {
+        FIXME("interface %s not implemented\n", debugstr_guid(riid));
+        return E_NOINTERFACE;
+    }
+
+    IVBSAXLocator_AddRef( iface );
+
+    return S_OK;
+}
+
+static ULONG WINAPI ivbsaxlocator_AddRef(IVBSAXLocator* iface)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    TRACE("%p\n", This );
+    return InterlockedIncrement( &This->ref );
+}
+
+static ULONG WINAPI ivbsaxlocator_Release(
+        IVBSAXLocator* iface)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    return ISAXLocator_Release((ISAXLocator*)&This->lpVBSAXLocatorVtbl);
+}
+
+/*** IDispatch methods ***/
+static HRESULT WINAPI ivbsaxlocator_GetTypeInfoCount( IVBSAXLocator *iface, UINT* pctinfo )
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+
+    TRACE("(%p)->(%p)\n", This, pctinfo);
+
+    *pctinfo = 1;
+
+    return S_OK;
+}
+
+static HRESULT WINAPI ivbsaxlocator_GetTypeInfo(
+    IVBSAXLocator *iface,
+    UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo )
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    HRESULT hr;
+
+    TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+    hr = get_typeinfo(IVBSAXLocator_tid, ppTInfo);
+
+    return hr;
+}
+
+static HRESULT WINAPI ivbsaxlocator_GetIDsOfNames(
+    IVBSAXLocator *iface,
+    REFIID riid,
+    LPOLESTR* rgszNames,
+    UINT cNames,
+    LCID lcid,
+    DISPID* rgDispId)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    ITypeInfo *typeinfo;
+    HRESULT hr;
+
+    TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
+          lcid, rgDispId);
+
+    if(!rgszNames || cNames == 0 || !rgDispId)
+        return E_INVALIDARG;
+
+    hr = get_typeinfo(IVBSAXLocator_tid, &typeinfo);
+    if(SUCCEEDED(hr))
+    {
+        hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
+        ITypeInfo_Release(typeinfo);
+    }
+
+    return hr;
+}
+
+static HRESULT WINAPI ivbsaxlocator_Invoke(
+    IVBSAXLocator *iface,
+    DISPID dispIdMember,
+    REFIID riid,
+    LCID lcid,
+    WORD wFlags,
+    DISPPARAMS* pDispParams,
+    VARIANT* pVarResult,
+    EXCEPINFO* pExcepInfo,
+    UINT* puArgErr)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    ITypeInfo *typeinfo;
+    HRESULT hr;
+
+    TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
+          lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+    hr = get_typeinfo(IVBSAXLocator_tid, &typeinfo);
+    if(SUCCEEDED(hr))
+    {
+        hr = ITypeInfo_Invoke(typeinfo, &(This->lpVBSAXLocatorVtbl), dispIdMember, wFlags, pDispParams,
+                pVarResult, pExcepInfo, puArgErr);
+        ITypeInfo_Release(typeinfo);
+    }
+
+    return hr;
+}
+
+/*** IVBSAXLocator methods ***/
+static HRESULT WINAPI ivbsaxlocator_get_columnNumber(
+        IVBSAXLocator* iface,
+        int *pnColumn)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    return ISAXLocator_getColumnNumber(
+            (ISAXLocator*)&This->lpVBSAXLocatorVtbl,
+            pnColumn);
+}
+
+static HRESULT WINAPI ivbsaxlocator_get_lineNumber(
+        IVBSAXLocator* iface,
+        int *pnLine)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    return ISAXLocator_getLineNumber(
+            (ISAXLocator*)&This->lpVBSAXLocatorVtbl,
+            pnLine);
+}
+
+static HRESULT WINAPI ivbsaxlocator_get_publicId(
+        IVBSAXLocator* iface,
+        BSTR* publicId)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    return ISAXLocator_getPublicId(
+            (ISAXLocator*)&This->lpVBSAXLocatorVtbl,
+            (const WCHAR**)publicId);
+}
+
+static HRESULT WINAPI ivbsaxlocator_get_systemId(
+        IVBSAXLocator* iface,
+        BSTR* systemId)
+{
+    saxlocator *This = impl_from_IVBSAXLocator( iface );
+    return ISAXLocator_getSystemId(
+            (ISAXLocator*)&This->lpVBSAXLocatorVtbl,
+            (const WCHAR**)systemId);
+}
+
+static const struct IVBSAXLocatorVtbl ivbsaxlocator_vtbl =
+{
+    ivbsaxlocator_QueryInterface,
+    ivbsaxlocator_AddRef,
+    ivbsaxlocator_Release,
+    ivbsaxlocator_GetTypeInfoCount,
+    ivbsaxlocator_GetTypeInfo,
+    ivbsaxlocator_GetIDsOfNames,
+    ivbsaxlocator_Invoke,
+    ivbsaxlocator_get_columnNumber,
+    ivbsaxlocator_get_lineNumber,
+    ivbsaxlocator_get_publicId,
+    ivbsaxlocator_get_systemId
+};
+
 /*** ISAXLocator interface ***/
 /*** IUnknown methods ***/
 static HRESULT WINAPI isaxlocator_QueryInterface(ISAXLocator* iface, REFIID riid, void **ppvObject)
@@ -1270,6 +1450,7 @@ static HRESULT SAXLocator_create(saxreader *reader, saxlocator **ppsaxlocator, B
     if( !locator )
         return E_OUTOFMEMORY;
 
+    locator->lpVBSAXLocatorVtbl = &ivbsaxlocator_vtbl;
     locator->lpSAXLocatorVtbl = &isaxlocator_vtbl;
     locator->ref = 1;
     locator->vbInterface = vbInterface;




More information about the wine-cvs mailing list