Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
0ba0f4cc
Commit
0ba0f4cc
authored
Nov 21, 2011
by
Nikolay Sivov
Committed by
Alexandre Julliard
Nov 21, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msxml3: Added IDispatchEx support for SAXReader.
parent
de7841b2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
103 additions
and
45 deletions
+103
-45
saxreader.c
dlls/msxml3/saxreader.c
+26
-45
saxreader.c
dlls/msxml3/tests/saxreader.c
+77
-0
No files found.
dlls/msxml3/saxreader.c
View file @
0ba0f4cc
...
...
@@ -77,6 +77,7 @@ struct bstrpool
typedef
struct
_saxreader
{
DispatchEx
dispex
;
IVBSAXXMLReader
IVBSAXXMLReader_iface
;
ISAXXMLReader
ISAXXMLReader_iface
;
LONG
ref
;
...
...
@@ -2605,6 +2606,10 @@ static HRESULT WINAPI saxxmlreader_QueryInterface(IVBSAXXMLReader* iface, REFIID
{
*
ppvObject
=
&
This
->
ISAXXMLReader_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
));
...
...
@@ -2660,6 +2665,7 @@ static ULONG WINAPI saxxmlreader_Release(
free_bstr_pool
(
&
This
->
pool
);
release_dispex
(
&
This
->
dispex
);
heap_free
(
This
);
}
...
...
@@ -2669,12 +2675,7 @@ static ULONG WINAPI saxxmlreader_Release(
static
HRESULT
WINAPI
saxxmlreader_GetTypeInfoCount
(
IVBSAXXMLReader
*
iface
,
UINT
*
pctinfo
)
{
saxreader
*
This
=
impl_from_IVBSAXXMLReader
(
iface
);
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
pctinfo
);
*
pctinfo
=
1
;
return
S_OK
;
return
IDispatchEx_GetTypeInfoCount
(
&
This
->
dispex
.
IDispatchEx_iface
,
pctinfo
);
}
static
HRESULT
WINAPI
saxxmlreader_GetTypeInfo
(
...
...
@@ -2682,13 +2683,8 @@ static HRESULT WINAPI saxxmlreader_GetTypeInfo(
UINT
iTInfo
,
LCID
lcid
,
ITypeInfo
**
ppTInfo
)
{
saxreader
*
This
=
impl_from_IVBSAXXMLReader
(
iface
);
HRESULT
hr
;
TRACE
(
"(%p)->(%u %u %p)
\n
"
,
This
,
iTInfo
,
lcid
,
ppTInfo
);
hr
=
get_typeinfo
(
IVBSAXXMLReader_tid
,
ppTInfo
);
return
hr
;
return
IDispatchEx_GetTypeInfo
(
&
This
->
dispex
.
IDispatchEx_iface
,
iTInfo
,
lcid
,
ppTInfo
);
}
static
HRESULT
WINAPI
saxxmlreader_GetIDsOfNames
(
...
...
@@ -2700,23 +2696,8 @@ static HRESULT WINAPI saxxmlreader_GetIDsOfNames(
DISPID
*
rgDispId
)
{
saxreader
*
This
=
impl_from_IVBSAXXMLReader
(
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
(
IVBSAXXMLReader_tid
,
&
typeinfo
);
if
(
SUCCEEDED
(
hr
))
{
hr
=
ITypeInfo_GetIDsOfNames
(
typeinfo
,
rgszNames
,
cNames
,
rgDispId
);
ITypeInfo_Release
(
typeinfo
);
}
return
hr
;
return
IDispatchEx_GetIDsOfNames
(
&
This
->
dispex
.
IDispatchEx_iface
,
riid
,
rgszNames
,
cNames
,
lcid
,
rgDispId
);
}
static
HRESULT
WINAPI
saxxmlreader_Invoke
(
...
...
@@ -2731,21 +2712,8 @@ static HRESULT WINAPI saxxmlreader_Invoke(
UINT
*
puArgErr
)
{
saxreader
*
This
=
impl_from_IVBSAXXMLReader
(
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
(
IVBSAXXMLReader_tid
,
&
typeinfo
);
if
(
SUCCEEDED
(
hr
))
{
hr
=
ITypeInfo_Invoke
(
typeinfo
,
&
This
->
IVBSAXXMLReader_iface
,
dispIdMember
,
wFlags
,
pDispParams
,
pVarResult
,
pExcepInfo
,
puArgErr
);
ITypeInfo_Release
(
typeinfo
);
}
return
hr
;
return
IDispatchEx_Invoke
(
&
This
->
dispex
.
IDispatchEx_iface
,
dispIdMember
,
riid
,
lcid
,
wFlags
,
pDispParams
,
pVarResult
,
pExcepInfo
,
puArgErr
);
}
/*** IVBSAXXMLReader methods ***/
...
...
@@ -3159,6 +3127,17 @@ static const struct ISAXXMLReaderVtbl isaxreader_vtbl =
isaxxmlreader_parseURL
};
static
const
tid_t
saxreader_iface_tids
[]
=
{
IVBSAXXMLReader_tid
,
0
};
static
dispex_static_data_t
saxreader_dispex
=
{
NULL
,
IVBSAXXMLReader_tid
,
NULL
,
saxreader_iface_tids
};
HRESULT
SAXXMLReader_create
(
MSXML_VERSION
version
,
IUnknown
*
pUnkOuter
,
LPVOID
*
ppObj
)
{
saxreader
*
reader
;
...
...
@@ -3187,6 +3166,8 @@ HRESULT SAXXMLReader_create(MSXML_VERSION version, IUnknown *pUnkOuter, LPVOID *
reader
->
features
=
Namespaces
;
reader
->
version
=
version
;
init_dispex
(
&
reader
->
dispex
,
(
IUnknown
*
)
&
reader
->
IVBSAXXMLReader_iface
,
&
saxreader_dispex
);
memset
(
&
reader
->
sax
,
0
,
sizeof
(
xmlSAXHandler
));
reader
->
sax
.
initialized
=
XML_SAX2_MAGIC
;
reader
->
sax
.
startDocument
=
libxmlStartDocument
;
...
...
dlls/msxml3/tests/saxreader.c
View file @
0ba0f4cc
...
...
@@ -28,7 +28,9 @@
#include "windows.h"
#include "ole2.h"
#include "msxml2.h"
#include "msxml2did.h"
#include "ocidl.h"
#include "dispex.h"
#include "wine/test.h"
...
...
@@ -2596,6 +2598,80 @@ static void test_mxwriter_encoding(void)
free_bstrs
();
}
static
void
test_obj_dispex
(
IUnknown
*
obj
)
{
static
const
WCHAR
starW
[]
=
{
'*'
,
0
};
DISPID
dispid
=
DISPID_SAX_XMLREADER_GETFEATURE
;
IDispatchEx
*
dispex
;
IUnknown
*
unk
;
DWORD
props
;
UINT
ticnt
;
HRESULT
hr
;
BSTR
name
;
hr
=
IUnknown_QueryInterface
(
obj
,
&
IID_IDispatchEx
,
(
void
**
)
&
dispex
);
EXPECT_HR
(
hr
,
S_OK
);
if
(
FAILED
(
hr
))
return
;
ticnt
=
0
;
hr
=
IDispatchEx_GetTypeInfoCount
(
dispex
,
&
ticnt
);
EXPECT_HR
(
hr
,
S_OK
);
ok
(
ticnt
==
1
,
"ticnt=%u
\n
"
,
ticnt
);
name
=
SysAllocString
(
starW
);
hr
=
IDispatchEx_DeleteMemberByName
(
dispex
,
name
,
fdexNameCaseSensitive
);
EXPECT_HR
(
hr
,
E_NOTIMPL
);
SysFreeString
(
name
);
hr
=
IDispatchEx_DeleteMemberByDispID
(
dispex
,
dispid
);
EXPECT_HR
(
hr
,
E_NOTIMPL
);
props
=
0
;
hr
=
IDispatchEx_GetMemberProperties
(
dispex
,
dispid
,
grfdexPropCanAll
,
&
props
);
EXPECT_HR
(
hr
,
E_NOTIMPL
);
ok
(
props
==
0
,
"expected 0 got %d
\n
"
,
props
);
hr
=
IDispatchEx_GetMemberName
(
dispex
,
dispid
,
&
name
);
EXPECT_HR
(
hr
,
E_NOTIMPL
);
if
(
SUCCEEDED
(
hr
))
SysFreeString
(
name
);
hr
=
IDispatchEx_GetNextDispID
(
dispex
,
fdexEnumDefault
,
DISPID_SAX_XMLREADER_GETFEATURE
,
&
dispid
);
EXPECT_HR
(
hr
,
E_NOTIMPL
);
hr
=
IDispatchEx_GetNameSpaceParent
(
dispex
,
&
unk
);
EXPECT_HR
(
hr
,
E_NOTIMPL
);
if
(
hr
==
S_OK
&&
unk
)
IUnknown_Release
(
unk
);
IDispatchEx_Release
(
dispex
);
}
static
void
test_dispex
(
void
)
{
IVBSAXXMLReader
*
vbreader
;
ISAXXMLReader
*
reader
;
IUnknown
*
unk
;
HRESULT
hr
;
hr
=
CoCreateInstance
(
&
CLSID_SAXXMLReader
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_ISAXXMLReader
,
(
void
**
)
&
reader
);
EXPECT_HR
(
hr
,
S_OK
);
hr
=
ISAXXMLReader_QueryInterface
(
reader
,
&
IID_IUnknown
,
(
void
**
)
&
unk
);
EXPECT_HR
(
hr
,
S_OK
);
test_obj_dispex
(
unk
);
IUnknown_Release
(
unk
);
hr
=
ISAXXMLReader_QueryInterface
(
reader
,
&
IID_IVBSAXXMLReader
,
(
void
**
)
&
vbreader
);
EXPECT_HR
(
hr
,
S_OK
);
hr
=
IVBSAXXMLReader_QueryInterface
(
vbreader
,
&
IID_IUnknown
,
(
void
**
)
&
unk
);
EXPECT_HR
(
hr
,
S_OK
);
test_obj_dispex
(
unk
);
IUnknown_Release
(
unk
);
IVBSAXXMLReader_Release
(
vbreader
);
ISAXXMLReader_Release
(
reader
);
}
START_TEST
(
saxreader
)
{
ISAXXMLReader
*
reader
;
...
...
@@ -2621,6 +2697,7 @@ START_TEST(saxreader)
test_saxreader_properties
();
test_saxreader_features
();
test_encoding
();
test_dispex
();
/* MXXMLWriter tests */
get_supported_mxwriter_data
(
msxmlsupported_data
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment