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