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
76c028b7
Commit
76c028b7
authored
Dec 27, 2010
by
Jacek Caban
Committed by
Alexandre Julliard
Dec 28, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Pass DispatchEx pointer instead of outer IUnknown to DispatchEx's vtbl functions.
parent
1966ba8b
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
230 additions
and
199 deletions
+230
-199
dispex.c
dlls/mshtml/dispex.c
+19
-15
htmlelem.c
dlls/mshtml/htmlelem.c
+33
-30
htmlelemcol.c
dlls/mshtml/htmlelemcol.c
+28
-22
htmlimg.c
dlls/mshtml/htmlimg.c
+20
-15
htmlnode.c
dlls/mshtml/htmlnode.c
+28
-23
htmlstyle.c
dlls/mshtml/htmlstyle.c
+22
-22
htmlwindow.c
dlls/mshtml/htmlwindow.c
+73
-67
mshtml_private.h
dlls/mshtml/mshtml_private.h
+7
-5
No files found.
dlls/mshtml/dispex.c
View file @
76c028b7
...
...
@@ -445,7 +445,7 @@ static HRESULT dispex_value(DispatchEx *This, LCID lcid, WORD flags, DISPPARAMS
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
if
(
This
->
data
->
vtbl
&&
This
->
data
->
vtbl
->
value
)
return
This
->
data
->
vtbl
->
value
(
This
->
outer
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
return
This
->
data
->
vtbl
->
value
(
This
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
switch
(
flags
)
{
case
DISPATCH_PROPERTYGET
:
...
...
@@ -526,10 +526,23 @@ static ULONG WINAPI Function_Release(IUnknown *iface)
return
IDispatchEx_Release
(
DISPATCHEX
(
This
->
obj
));
}
static
HRESULT
function_value
(
IUnknown
*
iface
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
#undef FUNCTION_THIS
static
const
IUnknownVtbl
FunctionUnkVtbl
=
{
Function_QueryInterface
,
Function_AddRef
,
Function_Release
};
static
inline
func_disp_t
*
impl_from_DispatchEx
(
DispatchEx
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
func_disp_t
,
dispex
);
}
static
HRESULT
function_value
(
DispatchEx
*
dispex
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
func_disp_t
*
This
=
FUNCTION_THIS
(
iface
);
func_disp_t
*
This
=
impl_from_DispatchEx
(
dispex
);
HRESULT
hres
;
switch
(
flags
)
{
...
...
@@ -547,14 +560,6 @@ static HRESULT function_value(IUnknown *iface, LCID lcid, WORD flags, DISPPARAMS
return
hres
;
}
#undef FUNCTION_THIS
static
const
IUnknownVtbl
FunctionUnkVtbl
=
{
Function_QueryInterface
,
Function_AddRef
,
Function_Release
};
static
const
dispex_static_data_vtbl_t
function_dispex_vtbl
=
{
function_value
,
NULL
,
...
...
@@ -702,7 +707,7 @@ static HRESULT get_builtin_id(DispatchEx *This, BSTR name, DWORD grfdex, DISPID
if
(
This
->
data
->
vtbl
&&
This
->
data
->
vtbl
->
get_dispid
)
{
HRESULT
hres
;
hres
=
This
->
data
->
vtbl
->
get_dispid
(
This
->
outer
,
name
,
grfdex
,
ret
);
hres
=
This
->
data
->
vtbl
->
get_dispid
(
This
,
name
,
grfdex
,
ret
);
if
(
hres
!=
DISP_E_UNKNOWNNAME
)
return
hres
;
}
...
...
@@ -886,13 +891,12 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
TRACE
(
"(%p)->(%x %x %x %p %p %p %p)
\n
"
,
This
,
id
,
lcid
,
wFlags
,
pdp
,
pvarRes
,
pei
,
pspCaller
);
if
(
is_custom_dispid
(
id
)
&&
This
->
data
->
vtbl
&&
This
->
data
->
vtbl
->
invoke
)
return
This
->
data
->
vtbl
->
invoke
(
This
->
outer
,
id
,
lcid
,
wFlags
,
pdp
,
pvarRes
,
pei
,
pspCaller
);
return
This
->
data
->
vtbl
->
invoke
(
This
,
id
,
lcid
,
wFlags
,
pdp
,
pvarRes
,
pei
,
pspCaller
);
if
(
wFlags
==
DISPATCH_CONSTRUCT
)
{
if
(
id
==
DISPID_VALUE
)
{
if
(
This
->
data
->
vtbl
&&
This
->
data
->
vtbl
->
value
)
{
return
This
->
data
->
vtbl
->
value
(
This
->
outer
,
lcid
,
wFlags
,
pdp
,
pvarRes
,
pei
,
pspCaller
);
return
This
->
data
->
vtbl
->
value
(
This
,
lcid
,
wFlags
,
pdp
,
pvarRes
,
pei
,
pspCaller
);
}
FIXME
(
"DISPATCH_CONSTRUCT flag but missing value function
\n
"
);
return
E_FAIL
;
...
...
dlls/mshtml/htmlelem.c
View file @
76c028b7
...
...
@@ -1492,31 +1492,6 @@ static HRESULT WINAPI HTMLElement_get_all(IHTMLElement *iface, IDispatch **p)
return
S_OK
;
}
static
HRESULT
HTMLElement_get_dispid
(
IUnknown
*
iface
,
BSTR
name
,
DWORD
grfdex
,
DISPID
*
pid
)
{
HTMLElement
*
This
=
HTMLELEM_THIS
(
iface
);
if
(
This
->
node
.
vtbl
->
get_dispid
)
return
This
->
node
.
vtbl
->
get_dispid
(
&
This
->
node
,
name
,
grfdex
,
pid
);
return
DISP_E_UNKNOWNNAME
;
}
static
HRESULT
HTMLElement_invoke
(
IUnknown
*
iface
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLElement
*
This
=
HTMLELEM_THIS
(
iface
);
if
(
This
->
node
.
vtbl
->
invoke
)
return
This
->
node
.
vtbl
->
invoke
(
&
This
->
node
,
id
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
ERR
(
"(%p): element has no invoke method
\n
"
,
This
);
return
E_NOTIMPL
;
}
#undef HTMLELEM_THIS
static
const
IHTMLElementVtbl
HTMLElementVtbl
=
{
...
...
@@ -1683,6 +1658,36 @@ static const NodeImplVtbl HTMLElementImplVtbl = {
HTMLElement_clone
};
static
inline
HTMLElement
*
impl_from_DispatchEx
(
DispatchEx
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
HTMLElement
,
node
.
dispex
);
}
static
HRESULT
HTMLElement_get_dispid
(
DispatchEx
*
dispex
,
BSTR
name
,
DWORD
grfdex
,
DISPID
*
pid
)
{
HTMLElement
*
This
=
impl_from_DispatchEx
(
dispex
);
if
(
This
->
node
.
vtbl
->
get_dispid
)
return
This
->
node
.
vtbl
->
get_dispid
(
&
This
->
node
,
name
,
grfdex
,
pid
);
return
DISP_E_UNKNOWNNAME
;
}
static
HRESULT
HTMLElement_invoke
(
DispatchEx
*
dispex
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLElement
*
This
=
impl_from_DispatchEx
(
dispex
);
if
(
This
->
node
.
vtbl
->
invoke
)
return
This
->
node
.
vtbl
->
invoke
(
&
This
->
node
,
id
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
ERR
(
"(%p): element has no invoke method
\n
"
,
This
);
return
E_NOTIMPL
;
}
static
const
tid_t
HTMLElement_iface_tids
[]
=
{
HTMLELEMENT_TIDS
,
0
...
...
@@ -1888,7 +1893,7 @@ static const IHTMLFiltersCollectionVtbl HTMLFiltersCollectionVtbl = {
HTMLFiltersCollection_item
};
static
HRESULT
HTMLFiltersCollection_get_dispid
(
IUnknown
*
iface
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
static
HRESULT
HTMLFiltersCollection_get_dispid
(
DispatchEx
*
dispex
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
{
WCHAR
*
ptr
;
int
idx
=
0
;
...
...
@@ -1903,12 +1908,10 @@ static HRESULT HTMLFiltersCollection_get_dispid(IUnknown *iface, BSTR name, DWOR
return
S_OK
;
}
static
HRESULT
HTMLFiltersCollection_invoke
(
IUnknown
*
iface
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
static
HRESULT
HTMLFiltersCollection_invoke
(
DispatchEx
*
dispex
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLFiltersCollection
*
This
=
HTMLFILTERSCOLLECTION_THIS
(
iface
);
TRACE
(
"(%p)->(%x %x %x %p %p %p)
\n
"
,
This
,
id
,
lcid
,
flags
,
params
,
res
,
ei
);
TRACE
(
"(%p)->(%x %x %x %p %p %p)
\n
"
,
dispex
,
id
,
lcid
,
flags
,
params
,
res
,
ei
);
V_VT
(
res
)
=
VT_DISPATCH
;
V_DISPATCH
(
res
)
=
NULL
;
...
...
dlls/mshtml/htmlelemcol.c
View file @
76c028b7
...
...
@@ -382,11 +382,34 @@ static HRESULT WINAPI HTMLElementCollection_tags(IHTMLElementCollection *iface,
return
S_OK
;
}
#undef ELEMCOL_THIS
static
const
IHTMLElementCollectionVtbl
HTMLElementCollectionVtbl
=
{
HTMLElementCollection_QueryInterface
,
HTMLElementCollection_AddRef
,
HTMLElementCollection_Release
,
HTMLElementCollection_GetTypeInfoCount
,
HTMLElementCollection_GetTypeInfo
,
HTMLElementCollection_GetIDsOfNames
,
HTMLElementCollection_Invoke
,
HTMLElementCollection_toString
,
HTMLElementCollection_put_length
,
HTMLElementCollection_get_length
,
HTMLElementCollection_get__newEnum
,
HTMLElementCollection_item
,
HTMLElementCollection_tags
};
static
inline
HTMLElementCollection
*
impl_from_DispatchEx
(
DispatchEx
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
HTMLElementCollection
,
dispex
);
}
#define DISPID_ELEMCOL_0 MSHTML_DISPID_CUSTOM_MIN
static
HRESULT
HTMLElementCollection_get_dispid
(
IUnknown
*
iface
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
static
HRESULT
HTMLElementCollection_get_dispid
(
DispatchEx
*
dispex
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
{
HTMLElementCollection
*
This
=
ELEMCOL_THIS
(
iface
);
HTMLElementCollection
*
This
=
impl_from_DispatchEx
(
dispex
);
WCHAR
*
ptr
;
DWORD
idx
=
0
;
...
...
@@ -413,10 +436,10 @@ static HRESULT HTMLElementCollection_get_dispid(IUnknown *iface, BSTR name, DWOR
return
S_OK
;
}
static
HRESULT
HTMLElementCollection_invoke
(
IUnknown
*
iface
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
static
HRESULT
HTMLElementCollection_invoke
(
DispatchEx
*
dispex
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLElementCollection
*
This
=
ELEMCOL_THIS
(
iface
);
HTMLElementCollection
*
This
=
impl_from_DispatchEx
(
dispex
);
DWORD
idx
;
TRACE
(
"(%p)->(%x %x %x %p %p %p %p)
\n
"
,
This
,
id
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
...
...
@@ -439,24 +462,6 @@ static HRESULT HTMLElementCollection_invoke(IUnknown *iface, DISPID id, LCID lci
return
S_OK
;
}
#undef ELEMCOL_THIS
static
const
IHTMLElementCollectionVtbl
HTMLElementCollectionVtbl
=
{
HTMLElementCollection_QueryInterface
,
HTMLElementCollection_AddRef
,
HTMLElementCollection_Release
,
HTMLElementCollection_GetTypeInfoCount
,
HTMLElementCollection_GetTypeInfo
,
HTMLElementCollection_GetIDsOfNames
,
HTMLElementCollection_Invoke
,
HTMLElementCollection_toString
,
HTMLElementCollection_put_length
,
HTMLElementCollection_get_length
,
HTMLElementCollection_get__newEnum
,
HTMLElementCollection_item
,
HTMLElementCollection_tags
};
static
const
dispex_static_data_vtbl_t
HTMLElementColection_dispex_vtbl
=
{
NULL
,
HTMLElementCollection_get_dispid
,
...
...
@@ -467,6 +472,7 @@ static const tid_t HTMLElementCollection_iface_tids[] = {
IHTMLElementCollection_tid
,
0
};
static
dispex_static_data_t
HTMLElementCollection_dispex
=
{
&
HTMLElementColection_dispex_vtbl
,
DispHTMLElementCollection_tid
,
...
...
dlls/mshtml/htmlimg.c
View file @
76c028b7
...
...
@@ -851,11 +851,29 @@ static HRESULT WINAPI HTMLImageElementFactory_create(IHTMLImageElementFactory *i
return
S_OK
;
}
static
HRESULT
HTMLImageElementFactory_value
(
IUnknown
*
iface
,
LCID
lcid
,
#undef HTMLIMGFACTORY_THIS
static
const
IHTMLImageElementFactoryVtbl
HTMLImageElementFactoryVtbl
=
{
HTMLImageElementFactory_QueryInterface
,
HTMLImageElementFactory_AddRef
,
HTMLImageElementFactory_Release
,
HTMLImageElementFactory_GetTypeInfoCount
,
HTMLImageElementFactory_GetTypeInfo
,
HTMLImageElementFactory_GetIDsOfNames
,
HTMLImageElementFactory_Invoke
,
HTMLImageElementFactory_create
};
static
inline
HTMLImageElementFactory
*
impl_from_DispatchEx
(
DispatchEx
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
HTMLImageElementFactory
,
dispex
);
}
static
HRESULT
HTMLImageElementFactory_value
(
DispatchEx
*
dispex
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLImageElementFactory
*
This
=
HTMLIMGFACTORY_THIS
(
iface
);
HTMLImageElementFactory
*
This
=
impl_from_DispatchEx
(
dispex
);
IHTMLImgElement
*
img
;
VARIANT
empty
,
*
width
,
*
height
;
HRESULT
hres
;
...
...
@@ -878,19 +896,6 @@ static HRESULT HTMLImageElementFactory_value(IUnknown *iface, LCID lcid,
return
S_OK
;
}
#undef HTMLIMGFACTORY_THIS
static
const
IHTMLImageElementFactoryVtbl
HTMLImageElementFactoryVtbl
=
{
HTMLImageElementFactory_QueryInterface
,
HTMLImageElementFactory_AddRef
,
HTMLImageElementFactory_Release
,
HTMLImageElementFactory_GetTypeInfoCount
,
HTMLImageElementFactory_GetTypeInfo
,
HTMLImageElementFactory_GetIDsOfNames
,
HTMLImageElementFactory_Invoke
,
HTMLImageElementFactory_create
};
static
const
tid_t
HTMLImageElementFactory_iface_tids
[]
=
{
IHTMLImageElementFactory_tid
,
0
...
...
dlls/mshtml/htmlnode.c
View file @
76c028b7
...
...
@@ -184,11 +184,31 @@ static HRESULT WINAPI HTMLDOMChildrenCollection_item(IHTMLDOMChildrenCollection
return
S_OK
;
}
#undef HTMLCHILDCOL_THIS
static
const
IHTMLDOMChildrenCollectionVtbl
HTMLDOMChildrenCollectionVtbl
=
{
HTMLDOMChildrenCollection_QueryInterface
,
HTMLDOMChildrenCollection_AddRef
,
HTMLDOMChildrenCollection_Release
,
HTMLDOMChildrenCollection_GetTypeInfoCount
,
HTMLDOMChildrenCollection_GetTypeInfo
,
HTMLDOMChildrenCollection_GetIDsOfNames
,
HTMLDOMChildrenCollection_Invoke
,
HTMLDOMChildrenCollection_get_length
,
HTMLDOMChildrenCollection__newEnum
,
HTMLDOMChildrenCollection_item
};
static
inline
HTMLDOMChildrenCollection
*
impl_from_DispatchEx
(
DispatchEx
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
HTMLDOMChildrenCollection
,
dispex
);
}
#define DISPID_CHILDCOL_0 MSHTML_DISPID_CUSTOM_MIN
static
HRESULT
HTMLDOMChildrenCollection_get_dispid
(
IUnknown
*
iface
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
static
HRESULT
HTMLDOMChildrenCollection_get_dispid
(
DispatchEx
*
dispex
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
{
HTMLDOMChildrenCollection
*
This
=
HTMLCHILDCOL_THIS
(
iface
);
HTMLDOMChildrenCollection
*
This
=
impl_from_DispatchEx
(
dispex
);
WCHAR
*
ptr
;
DWORD
idx
=
0
;
PRUint32
len
=
0
;
...
...
@@ -207,10 +227,10 @@ static HRESULT HTMLDOMChildrenCollection_get_dispid(IUnknown *iface, BSTR name,
return
S_OK
;
}
static
HRESULT
HTMLDOMChildrenCollection_invoke
(
IUnknown
*
iface
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
static
HRESULT
HTMLDOMChildrenCollection_invoke
(
DispatchEx
*
dispex
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLDOMChildrenCollection
*
This
=
HTMLCHILDCOL_THIS
(
iface
);
HTMLDOMChildrenCollection
*
This
=
impl_from_DispatchEx
(
dispex
);
TRACE
(
"(%p)->(%x %x %x %p %p %p %p)
\n
"
,
This
,
id
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
...
...
@@ -236,19 +256,10 @@ static HRESULT HTMLDOMChildrenCollection_invoke(IUnknown *iface, DISPID id, LCID
return
S_OK
;
}
#undef HTMLCHILDCOL_THIS
static
const
IHTMLDOMChildrenCollectionVtbl
HTMLDOMChildrenCollectionVtbl
=
{
HTMLDOMChildrenCollection_QueryInterface
,
HTMLDOMChildrenCollection_AddRef
,
HTMLDOMChildrenCollection_Release
,
HTMLDOMChildrenCollection_GetTypeInfoCount
,
HTMLDOMChildrenCollection_GetTypeInfo
,
HTMLDOMChildrenCollection_GetIDsOfNames
,
HTMLDOMChildrenCollection_Invoke
,
HTMLDOMChildrenCollection_get_length
,
HTMLDOMChildrenCollection__newEnum
,
HTMLDOMChildrenCollection_item
static
const
dispex_static_data_vtbl_t
HTMLDOMChildrenCollection_dispex_vtbl
=
{
NULL
,
HTMLDOMChildrenCollection_get_dispid
,
HTMLDOMChildrenCollection_invoke
};
static
const
tid_t
HTMLDOMChildrenCollection_iface_tids
[]
=
{
...
...
@@ -256,12 +267,6 @@ static const tid_t HTMLDOMChildrenCollection_iface_tids[] = {
0
};
static
const
dispex_static_data_vtbl_t
HTMLDOMChildrenCollection_dispex_vtbl
=
{
NULL
,
HTMLDOMChildrenCollection_get_dispid
,
HTMLDOMChildrenCollection_invoke
};
static
dispex_static_data_t
HTMLDOMChildrenCollection_dispex
=
{
&
HTMLDOMChildrenCollection_dispex_vtbl
,
DispDOMChildrenCollection_tid
,
...
...
dlls/mshtml/htmlstyle.c
View file @
76c028b7
...
...
@@ -2463,28 +2463,6 @@ static HRESULT WINAPI HTMLStyle_toString(IHTMLStyle *iface, BSTR *String)
return
E_NOTIMPL
;
}
static
HRESULT
HTMLStyle_get_dispid
(
IUnknown
*
iface
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
{
int
c
,
i
,
min
=
0
,
max
=
sizeof
(
style_tbl
)
/
sizeof
(
*
style_tbl
)
-
1
;
while
(
min
<=
max
)
{
i
=
(
min
+
max
)
/
2
;
c
=
strcmpW
(
style_tbl
[
i
].
name
,
name
);
if
(
!
c
)
{
*
dispid
=
style_tbl
[
i
].
dispid
;
return
S_OK
;
}
if
(
c
>
0
)
max
=
i
-
1
;
else
min
=
i
+
1
;
}
return
DISP_E_UNKNOWNNAME
;
}
static
const
IHTMLStyleVtbl
HTMLStyleVtbl
=
{
HTMLStyle_QueryInterface
,
HTMLStyle_AddRef
,
...
...
@@ -2674,6 +2652,28 @@ static const IHTMLStyleVtbl HTMLStyleVtbl = {
HTMLStyle_toString
};
static
HRESULT
HTMLStyle_get_dispid
(
DispatchEx
*
dispex
,
BSTR
name
,
DWORD
flags
,
DISPID
*
dispid
)
{
int
c
,
i
,
min
=
0
,
max
=
sizeof
(
style_tbl
)
/
sizeof
(
*
style_tbl
)
-
1
;
while
(
min
<=
max
)
{
i
=
(
min
+
max
)
/
2
;
c
=
strcmpW
(
style_tbl
[
i
].
name
,
name
);
if
(
!
c
)
{
*
dispid
=
style_tbl
[
i
].
dispid
;
return
S_OK
;
}
if
(
c
>
0
)
max
=
i
-
1
;
else
min
=
i
+
1
;
}
return
DISP_E_UNKNOWNNAME
;
}
static
const
dispex_static_data_vtbl_t
HTMLStyle_dispex_vtbl
=
{
NULL
,
HTMLStyle_get_dispid
,
...
...
dlls/mshtml/htmlwindow.c
View file @
76c028b7
...
...
@@ -1236,67 +1236,6 @@ static HRESULT WINAPI HTMLWindow2_get_external(IHTMLWindow2 *iface, IDispatch **
return
IDocHostUIHandler_GetExternal
(
This
->
doc_obj
->
hostui
,
p
);
}
static
HRESULT
HTMLWindow_invoke
(
IUnknown
*
iface
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLWindow
*
This
=
impl_from_IHTMLWindow2
((
IHTMLWindow2
*
)
iface
);
global_prop_t
*
prop
;
DWORD
idx
;
HRESULT
hres
;
idx
=
id
-
MSHTML_DISPID_CUSTOM_MIN
;
if
(
idx
>=
This
->
global_prop_cnt
)
return
DISP_E_MEMBERNOTFOUND
;
prop
=
This
->
global_props
+
idx
;
switch
(
prop
->
type
)
{
case
GLOBAL_SCRIPTVAR
:
{
IDispatchEx
*
dispex
;
IDispatch
*
disp
;
disp
=
get_script_disp
(
prop
->
script_host
);
if
(
!
disp
)
return
E_UNEXPECTED
;
hres
=
IDispatch_QueryInterface
(
disp
,
&
IID_IDispatchEx
,
(
void
**
)
&
dispex
);
if
(
SUCCEEDED
(
hres
))
{
TRACE
(
"%s >>>
\n
"
,
debugstr_w
(
prop
->
name
));
hres
=
IDispatchEx_InvokeEx
(
dispex
,
prop
->
id
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
if
(
hres
==
S_OK
)
TRACE
(
"%s <<<
\n
"
,
debugstr_w
(
prop
->
name
));
else
WARN
(
"%s <<< %08x
\n
"
,
debugstr_w
(
prop
->
name
),
hres
);
IDispatchEx_Release
(
dispex
);
}
else
{
FIXME
(
"No IDispatchEx
\n
"
);
}
IDispatch_Release
(
disp
);
break
;
}
case
GLOBAL_ELEMENTVAR
:
{
IHTMLElement
*
elem
;
hres
=
IHTMLDocument3_getElementById
(
&
This
->
doc
->
basedoc
.
IHTMLDocument3_iface
,
prop
->
name
,
&
elem
);
if
(
FAILED
(
hres
))
return
hres
;
if
(
!
elem
)
return
DISP_E_MEMBERNOTFOUND
;
V_VT
(
res
)
=
VT_DISPATCH
;
V_DISPATCH
(
res
)
=
(
IDispatch
*
)
elem
;
break
;
}
default:
ERR
(
"invalid type %d
\n
"
,
prop
->
type
);
hres
=
DISP_E_MEMBERNOTFOUND
;
}
return
hres
;
}
static
const
IHTMLWindow2Vtbl
HTMLWindow2Vtbl
=
{
HTMLWindow2_QueryInterface
,
HTMLWindow2_AddRef
,
...
...
@@ -2170,12 +2109,72 @@ static const IServiceProviderVtbl ServiceProviderVtbl = {
HTMLWindowSP_QueryService
};
static
const
tid_t
HTMLWindow_iface_tids
[]
=
{
IHTMLWindow2_tid
,
IHTMLWindow3_tid
,
IHTMLWindow4_tid
,
0
};
static
inline
HTMLWindow
*
impl_from_DispatchEx
(
DispatchEx
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
HTMLWindow
,
dispex
);
}
static
HRESULT
HTMLWindow_invoke
(
DispatchEx
*
dispex
,
DISPID
id
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
res
,
EXCEPINFO
*
ei
,
IServiceProvider
*
caller
)
{
HTMLWindow
*
This
=
impl_from_DispatchEx
(
dispex
);
global_prop_t
*
prop
;
DWORD
idx
;
HRESULT
hres
;
idx
=
id
-
MSHTML_DISPID_CUSTOM_MIN
;
if
(
idx
>=
This
->
global_prop_cnt
)
return
DISP_E_MEMBERNOTFOUND
;
prop
=
This
->
global_props
+
idx
;
switch
(
prop
->
type
)
{
case
GLOBAL_SCRIPTVAR
:
{
IDispatchEx
*
dispex
;
IDispatch
*
disp
;
disp
=
get_script_disp
(
prop
->
script_host
);
if
(
!
disp
)
return
E_UNEXPECTED
;
hres
=
IDispatch_QueryInterface
(
disp
,
&
IID_IDispatchEx
,
(
void
**
)
&
dispex
);
if
(
SUCCEEDED
(
hres
))
{
TRACE
(
"%s >>>
\n
"
,
debugstr_w
(
prop
->
name
));
hres
=
IDispatchEx_InvokeEx
(
dispex
,
prop
->
id
,
lcid
,
flags
,
params
,
res
,
ei
,
caller
);
if
(
hres
==
S_OK
)
TRACE
(
"%s <<<
\n
"
,
debugstr_w
(
prop
->
name
));
else
WARN
(
"%s <<< %08x
\n
"
,
debugstr_w
(
prop
->
name
),
hres
);
IDispatchEx_Release
(
dispex
);
}
else
{
FIXME
(
"No IDispatchEx
\n
"
);
}
IDispatch_Release
(
disp
);
break
;
}
case
GLOBAL_ELEMENTVAR
:
{
IHTMLElement
*
elem
;
hres
=
IHTMLDocument3_getElementById
(
&
This
->
doc
->
basedoc
.
IHTMLDocument3_iface
,
prop
->
name
,
&
elem
);
if
(
FAILED
(
hres
))
return
hres
;
if
(
!
elem
)
return
DISP_E_MEMBERNOTFOUND
;
V_VT
(
res
)
=
VT_DISPATCH
;
V_DISPATCH
(
res
)
=
(
IDispatch
*
)
elem
;
break
;
}
default:
ERR
(
"invalid type %d
\n
"
,
prop
->
type
);
hres
=
DISP_E_MEMBERNOTFOUND
;
}
return
hres
;
}
static
const
dispex_static_data_vtbl_t
HTMLWindow_dispex_vtbl
=
{
NULL
,
...
...
@@ -2183,6 +2182,13 @@ static const dispex_static_data_vtbl_t HTMLWindow_dispex_vtbl = {
HTMLWindow_invoke
};
static
const
tid_t
HTMLWindow_iface_tids
[]
=
{
IHTMLWindow2_tid
,
IHTMLWindow3_tid
,
IHTMLWindow4_tid
,
0
};
static
dispex_static_data_t
HTMLWindow_dispex
=
{
&
HTMLWindow_dispex_vtbl
,
DispHTMLWindow2_tid
,
...
...
dlls/mshtml/mshtml_private.h
View file @
76c028b7
...
...
@@ -171,10 +171,12 @@ typedef struct dispex_dynamic_data_t dispex_dynamic_data_t;
#define MSHTML_DISPID_CUSTOM_MAX 0x6fffffff
#define MSHTML_CUSTOM_DISPID_CNT (MSHTML_DISPID_CUSTOM_MAX-MSHTML_DISPID_CUSTOM_MIN)
typedef
struct
DispatchEx
DispatchEx
;
typedef
struct
{
HRESULT
(
*
value
)(
IUnknown
*
,
LCID
,
WORD
,
DISPPARAMS
*
,
VARIANT
*
,
EXCEPINFO
*
,
IServiceProvider
*
);
HRESULT
(
*
get_dispid
)(
IUnknown
*
,
BSTR
,
DWORD
,
DISPID
*
);
HRESULT
(
*
invoke
)(
IUnknown
*
,
DISPID
,
LCID
,
WORD
,
DISPPARAMS
*
,
VARIANT
*
,
EXCEPINFO
*
,
IServiceProvider
*
);
HRESULT
(
*
value
)(
DispatchEx
*
,
LCID
,
WORD
,
DISPPARAMS
*
,
VARIANT
*
,
EXCEPINFO
*
,
IServiceProvider
*
);
HRESULT
(
*
get_dispid
)(
DispatchEx
*
,
BSTR
,
DWORD
,
DISPID
*
);
HRESULT
(
*
invoke
)(
DispatchEx
*
,
DISPID
,
LCID
,
WORD
,
DISPPARAMS
*
,
VARIANT
*
,
EXCEPINFO
*
,
IServiceProvider
*
);
}
dispex_static_data_vtbl_t
;
typedef
struct
{
...
...
@@ -184,14 +186,14 @@ typedef struct {
const
tid_t
*
const
iface_tids
;
}
dispex_static_data_t
;
typedef
struct
{
struct
DispatchEx
{
const
IDispatchExVtbl
*
lpIDispatchExVtbl
;
IUnknown
*
outer
;
dispex_static_data_t
*
data
;
dispex_dynamic_data_t
*
dynamic_data
;
}
DispatchEx
;
};
void
init_dispex
(
DispatchEx
*
,
IUnknown
*
,
dispex_static_data_t
*
);
void
release_dispex
(
DispatchEx
*
);
...
...
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