msxml3: Added IDispatchEx for IXSLProcessor.
This commit is contained in:
parent
f88ea3d2a7
commit
e18d99da74
|
@ -53,6 +53,7 @@ typedef struct _xsltemplate
|
||||||
|
|
||||||
typedef struct _xslprocessor
|
typedef struct _xslprocessor
|
||||||
{
|
{
|
||||||
|
DispatchEx dispex;
|
||||||
IXSLProcessor IXSLProcessor_iface;
|
IXSLProcessor IXSLProcessor_iface;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
|
||||||
|
@ -276,6 +277,10 @@ static HRESULT WINAPI xslprocessor_QueryInterface(
|
||||||
{
|
{
|
||||||
*ppvObject = iface;
|
*ppvObject = iface;
|
||||||
}
|
}
|
||||||
|
else if (dispex_query_interface(&This->dispex, riid, ppvObject))
|
||||||
|
{
|
||||||
|
return *ppvObject ? S_OK : E_NOINTERFACE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FIXME("Unsupported interface %s\n", debugstr_guid(riid));
|
FIXME("Unsupported interface %s\n", debugstr_guid(riid));
|
||||||
|
@ -305,6 +310,7 @@ static ULONG WINAPI xslprocessor_Release( IXSLProcessor *iface )
|
||||||
if (This->output) IStream_Release(This->output);
|
if (This->output) IStream_Release(This->output);
|
||||||
SysFreeString(This->outstr);
|
SysFreeString(This->outstr);
|
||||||
IXSLTemplate_Release(&This->stylesheet->IXSLTemplate_iface);
|
IXSLTemplate_Release(&This->stylesheet->IXSLTemplate_iface);
|
||||||
|
release_dispex(&This->dispex);
|
||||||
heap_free( This );
|
heap_free( This );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,11 +320,7 @@ static ULONG WINAPI xslprocessor_Release( IXSLProcessor *iface )
|
||||||
static HRESULT WINAPI xslprocessor_GetTypeInfoCount( IXSLProcessor *iface, UINT* pctinfo )
|
static HRESULT WINAPI xslprocessor_GetTypeInfoCount( IXSLProcessor *iface, UINT* pctinfo )
|
||||||
{
|
{
|
||||||
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
||||||
|
return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
|
||||||
TRACE("(%p)->(%p)\n", This, pctinfo);
|
|
||||||
|
|
||||||
*pctinfo = 1;
|
|
||||||
return S_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI xslprocessor_GetTypeInfo(
|
static HRESULT WINAPI xslprocessor_GetTypeInfo(
|
||||||
|
@ -327,10 +329,8 @@ static HRESULT WINAPI xslprocessor_GetTypeInfo(
|
||||||
ITypeInfo** ppTInfo )
|
ITypeInfo** ppTInfo )
|
||||||
{
|
{
|
||||||
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
||||||
|
return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface,
|
||||||
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
iTInfo, lcid, ppTInfo);
|
||||||
|
|
||||||
return get_typeinfo(IXSLProcessor_tid, ppTInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI xslprocessor_GetIDsOfNames(
|
static HRESULT WINAPI xslprocessor_GetIDsOfNames(
|
||||||
|
@ -339,23 +339,8 @@ static HRESULT WINAPI xslprocessor_GetIDsOfNames(
|
||||||
UINT cNames, LCID lcid, DISPID* rgDispId )
|
UINT cNames, LCID lcid, DISPID* rgDispId )
|
||||||
{
|
{
|
||||||
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
||||||
ITypeInfo *typeinfo;
|
return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface,
|
||||||
HRESULT hr;
|
riid, rgszNames, cNames, lcid, rgDispId);
|
||||||
|
|
||||||
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(IXSLProcessor_tid, &typeinfo);
|
|
||||||
if(SUCCEEDED(hr))
|
|
||||||
{
|
|
||||||
hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
|
|
||||||
ITypeInfo_Release(typeinfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return hr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI xslprocessor_Invoke(
|
static HRESULT WINAPI xslprocessor_Invoke(
|
||||||
|
@ -365,21 +350,8 @@ static HRESULT WINAPI xslprocessor_Invoke(
|
||||||
EXCEPINFO* pExcepInfo, UINT* puArgErr )
|
EXCEPINFO* pExcepInfo, UINT* puArgErr )
|
||||||
{
|
{
|
||||||
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
||||||
ITypeInfo *typeinfo;
|
return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface,
|
||||||
HRESULT hr;
|
dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||||
|
|
||||||
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(IXSLProcessor_tid, &typeinfo);
|
|
||||||
if(SUCCEEDED(hr))
|
|
||||||
{
|
|
||||||
hr = ITypeInfo_Invoke(typeinfo, &This->IXSLProcessor_iface, dispIdMember,
|
|
||||||
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
|
||||||
ITypeInfo_Release(typeinfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return hr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI xslprocessor_put_input( IXSLProcessor *iface, VARIANT input )
|
static HRESULT WINAPI xslprocessor_put_input( IXSLProcessor *iface, VARIANT input )
|
||||||
|
@ -610,7 +582,7 @@ static HRESULT WINAPI xslprocessor_get_stylesheet(
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct IXSLProcessorVtbl xslprocessor_vtbl =
|
static const struct IXSLProcessorVtbl XSLProcessorVtbl =
|
||||||
{
|
{
|
||||||
xslprocessor_QueryInterface,
|
xslprocessor_QueryInterface,
|
||||||
xslprocessor_AddRef,
|
xslprocessor_AddRef,
|
||||||
|
@ -636,6 +608,18 @@ static const struct IXSLProcessorVtbl xslprocessor_vtbl =
|
||||||
xslprocessor_get_stylesheet
|
xslprocessor_get_stylesheet
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const tid_t xslprocessor_iface_tids[] = {
|
||||||
|
IXSLProcessor_tid,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static dispex_static_data_t xslprocessor_dispex = {
|
||||||
|
NULL,
|
||||||
|
IXSLProcessor_tid,
|
||||||
|
NULL,
|
||||||
|
xslprocessor_iface_tids
|
||||||
|
};
|
||||||
|
|
||||||
HRESULT XSLProcessor_create(xsltemplate *template, IXSLProcessor **ppObj)
|
HRESULT XSLProcessor_create(xsltemplate *template, IXSLProcessor **ppObj)
|
||||||
{
|
{
|
||||||
xslprocessor *This;
|
xslprocessor *This;
|
||||||
|
@ -646,13 +630,14 @@ HRESULT XSLProcessor_create(xsltemplate *template, IXSLProcessor **ppObj)
|
||||||
if(!This)
|
if(!This)
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
This->IXSLProcessor_iface.lpVtbl = &xslprocessor_vtbl;
|
This->IXSLProcessor_iface.lpVtbl = &XSLProcessorVtbl;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->input = NULL;
|
This->input = NULL;
|
||||||
This->output = NULL;
|
This->output = NULL;
|
||||||
This->outstr = NULL;
|
This->outstr = NULL;
|
||||||
This->stylesheet = template;
|
This->stylesheet = template;
|
||||||
IXSLTemplate_AddRef(&template->IXSLTemplate_iface);
|
IXSLTemplate_AddRef(&template->IXSLTemplate_iface);
|
||||||
|
init_dispex(&This->dispex, (IUnknown*)&This->IXSLProcessor_iface, &xslprocessor_dispex);
|
||||||
|
|
||||||
*ppObj = &This->IXSLProcessor_iface;
|
*ppObj = &This->IXSLProcessor_iface;
|
||||||
|
|
||||||
|
|
|
@ -10672,6 +10672,7 @@ static void test_dispex(void)
|
||||||
IXMLDOMNodeList *node_list;
|
IXMLDOMNodeList *node_list;
|
||||||
IXMLDOMParseError *error;
|
IXMLDOMParseError *error;
|
||||||
IXMLDOMNamedNodeMap *map;
|
IXMLDOMNamedNodeMap *map;
|
||||||
|
IXSLProcessor *processor;
|
||||||
IXSLTemplate *template;
|
IXSLTemplate *template;
|
||||||
IXMLDOMDocument *doc;
|
IXMLDOMDocument *doc;
|
||||||
IXMLHTTPRequest *req;
|
IXMLHTTPRequest *req;
|
||||||
|
@ -10826,6 +10827,30 @@ static void test_dispex(void)
|
||||||
test_domobj_dispex(unk);
|
test_domobj_dispex(unk);
|
||||||
IUnknown_Release(unk);
|
IUnknown_Release(unk);
|
||||||
IDispatchEx_Release(dispex);
|
IDispatchEx_Release(dispex);
|
||||||
|
|
||||||
|
/* IXSLProcessor */
|
||||||
|
hr = CoCreateInstance(&CLSID_FreeThreadedDOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&doc);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
b = VARIANT_FALSE;
|
||||||
|
hr = IXMLDOMDocument_loadXML(doc, _bstr_(szTransformSSXML), &b);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
ok(b == VARIANT_TRUE, "got %d\n", b);
|
||||||
|
|
||||||
|
hr = IXSLTemplate_putref_stylesheet(template, (IXMLDOMNode*)doc);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
IXMLDOMDocument_Release(doc);
|
||||||
|
|
||||||
|
hr = IXSLTemplate_createProcessor(template, &processor);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
hr = IXSLProcessor_QueryInterface(processor, &IID_IDispatchEx, (void**)&dispex);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
hr = IDispatchEx_QueryInterface(dispex, &IID_IUnknown, (void**)&unk);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
test_domobj_dispex(unk);
|
||||||
|
IUnknown_Release(unk);
|
||||||
|
IDispatchEx_Release(dispex);
|
||||||
|
|
||||||
|
IXSLProcessor_Release(processor);
|
||||||
IXSLTemplate_Release(template);
|
IXSLTemplate_Release(template);
|
||||||
|
|
||||||
free_bstrs();
|
free_bstrs();
|
||||||
|
|
Loading…
Reference in New Issue