msxml3: Support IDispatchEx for IXMLDOMParseError.

This commit is contained in:
Nikolay Sivov 2011-11-01 23:50:56 +03:00 committed by Alexandre Julliard
parent 5e32724210
commit 7a62e46fa1
2 changed files with 29 additions and 0 deletions

View File

@ -44,6 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
typedef struct
{
DispatchEx dispex;
IXMLDOMParseError IXMLDOMParseError_iface;
LONG ref;
LONG code, line, linepos, filepos;
@ -70,6 +71,10 @@ static HRESULT WINAPI parseError_QueryInterface(
{
*ppvObject = iface;
}
else if (dispex_query_interface(&This->dispex, riid, ppvObject))
{
return *ppvObject ? S_OK : E_NOINTERFACE;
}
else
{
FIXME("interface %s not implemented\n", debugstr_guid(riid));
@ -103,6 +108,7 @@ static ULONG WINAPI parseError_Release(
SysFreeString(This->url);
SysFreeString(This->reason);
SysFreeString(This->srcText);
release_dispex(&This->dispex);
heap_free( This );
}
@ -289,6 +295,18 @@ static const struct IXMLDOMParseErrorVtbl parseError_vtbl =
parseError_get_filepos
};
static const tid_t parseError_iface_tids[] = {
IXMLDOMParseError_tid,
0
};
static dispex_static_data_t parseError_dispex = {
NULL,
IXMLDOMParseError_tid,
NULL,
parseError_iface_tids
};
IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR srcText,
LONG line, LONG linepos, LONG filepos )
{
@ -309,5 +327,7 @@ IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR src
This->linepos = linepos;
This->filepos = filepos;
init_dispex(&This->dispex, (IUnknown*)&This->IXMLDOMParseError_iface, &parseError_dispex);
return &This->IXMLDOMParseError_iface;
}

View File

@ -10627,6 +10627,7 @@ static void test_dispex(void)
{
const DOMNodeType *type = dispex_types_test;
IXMLDOMNodeList *node_list;
IXMLDOMParseError *error;
IXMLDOMDocument *doc;
IUnknown *unk;
HRESULT hr;
@ -10663,6 +10664,14 @@ static void test_dispex(void)
IUnknown_Release(unk);
IXMLDOMNodeList_Release(node_list);
/* IXMLDOMParseError */
hr = IXMLDOMDocument_get_parseError(doc, &error);
EXPECT_HR(hr, S_OK);
IXMLDOMParseError_QueryInterface(error, &IID_IUnknown, (void**)&unk);
test_domobj_dispex(unk);
IUnknown_Release(unk);
IXMLDOMParseError_Release(error);
IXMLDOMDocument_Release(doc);
free_bstrs();
}