2 * Copyright 2015 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/debug.h"
31 #include "wine/heap.h"
32 #include "wine/list.h"
34 WINE_DEFAULT_DEBUG_CHANNEL(msscript
);
38 #define IActiveScriptParse_Release IActiveScriptParse64_Release
39 #define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
40 #define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
44 #define IActiveScriptParse_Release IActiveScriptParse32_Release
45 #define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
46 #define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
51 typedef struct ConnectionPoint ConnectionPoint
;
53 struct ConnectionPoint
{
54 IConnectionPoint IConnectionPoint_iface
;
55 ScriptControl
*control
;
57 ConnectionPoint
*next
;
66 typedef struct ScriptHost
{
67 IActiveScriptSite IActiveScriptSite_iface
;
68 IActiveScriptSiteWindow IActiveScriptSiteWindow_iface
;
69 IServiceProvider IServiceProvider_iface
;
72 IActiveScript
*script
;
73 IActiveScriptParse
*parse
;
76 struct list named_items
;
79 struct ScriptControl
{
80 IScriptControl IScriptControl_iface
;
81 IPersistStreamInit IPersistStreamInit_iface
;
82 IOleObject IOleObject_iface
;
83 IOleControl IOleControl_iface
;
84 IQuickActivate IQuickActivate_iface
;
85 IViewObjectEx IViewObjectEx_iface
;
86 IPointerInactive IPointerInactive_iface
;
87 IConnectionPointContainer IConnectionPointContainer_iface
;
92 VARIANT_BOOL allow_ui
;
93 VARIANT_BOOL use_safe_subset
;
94 ScriptControlStates state
;
96 /* connection points */
97 ConnectionPoint
*cp_list
;
98 ConnectionPoint cp_scsource
;
99 ConnectionPoint cp_propnotif
;
101 /* IViewObject sink */
102 IAdviseSink
*view_sink
;
103 DWORD view_sink_flags
;
108 static HINSTANCE msscript_instance
;
115 static ITypeLib
*typelib
;
116 static ITypeInfo
*typeinfos
[LAST_tid
];
118 static REFIID tid_ids
[] = {
122 static HRESULT
load_typelib(void)
127 hres
= LoadRegTypeLib(&LIBID_MSScriptControl
, 1, 0, LOCALE_SYSTEM_DEFAULT
, &tl
);
129 ERR("LoadRegTypeLib failed: %08x\n", hres
);
133 if(InterlockedCompareExchangePointer((void**)&typelib
, tl
, NULL
))
134 ITypeLib_Release(tl
);
138 static HRESULT
get_typeinfo(tid_t tid
, ITypeInfo
**typeinfo
)
143 hres
= load_typelib();
147 if(!typeinfos
[tid
]) {
150 hres
= ITypeLib_GetTypeInfoOfGuid(typelib
, tid_ids
[tid
], &ti
);
152 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids
[tid
]), hres
);
156 if(InterlockedCompareExchangePointer((void**)(typeinfos
+tid
), ti
, NULL
))
157 ITypeInfo_Release(ti
);
160 *typeinfo
= typeinfos
[tid
];
161 ITypeInfo_AddRef(typeinfos
[tid
]);
165 static void release_typelib(void)
172 for(i
=0; i
< sizeof(typeinfos
)/sizeof(*typeinfos
); i
++)
174 ITypeInfo_Release(typeinfos
[i
]);
176 ITypeLib_Release(typelib
);
179 static void clear_named_items(ScriptHost
*host
)
181 struct named_item
*item
, *item1
;
182 LIST_FOR_EACH_ENTRY_SAFE(item
, item1
, &host
->named_items
, struct named_item
, entry
) {
183 list_remove(&item
->entry
);
184 SysFreeString(item
->name
);
185 IDispatch_Release(item
->disp
);
190 static struct named_item
*host_get_named_item(ScriptHost
*host
, const WCHAR
*nameW
)
192 struct named_item
*item
;
194 LIST_FOR_EACH_ENTRY(item
, &host
->named_items
, struct named_item
, entry
) {
195 if (!lstrcmpW(item
->name
, nameW
))
202 static inline ScriptControl
*impl_from_IScriptControl(IScriptControl
*iface
)
204 return CONTAINING_RECORD(iface
, ScriptControl
, IScriptControl_iface
);
207 static inline ScriptControl
*impl_from_IOleObject(IOleObject
*iface
)
209 return CONTAINING_RECORD(iface
, ScriptControl
, IOleObject_iface
);
212 static inline ScriptControl
*impl_from_IPersistStreamInit(IPersistStreamInit
*iface
)
214 return CONTAINING_RECORD(iface
, ScriptControl
, IPersistStreamInit_iface
);
217 static inline ScriptControl
*impl_from_IOleControl(IOleControl
*iface
)
219 return CONTAINING_RECORD(iface
, ScriptControl
, IOleControl_iface
);
222 static inline ScriptControl
*impl_from_IQuickActivate(IQuickActivate
*iface
)
224 return CONTAINING_RECORD(iface
, ScriptControl
, IQuickActivate_iface
);
227 static inline ScriptControl
*impl_from_IViewObjectEx(IViewObjectEx
*iface
)
229 return CONTAINING_RECORD(iface
, ScriptControl
, IViewObjectEx_iface
);
232 static inline ScriptControl
*impl_from_IPointerInactive(IPointerInactive
*iface
)
234 return CONTAINING_RECORD(iface
, ScriptControl
, IPointerInactive_iface
);
237 static inline ScriptControl
*impl_from_IConnectionPointContainer(IConnectionPointContainer
*iface
)
239 return CONTAINING_RECORD(iface
, ScriptControl
, IConnectionPointContainer_iface
);
242 static inline ConnectionPoint
*impl_from_IConnectionPoint(IConnectionPoint
*iface
)
244 return CONTAINING_RECORD(iface
, ConnectionPoint
, IConnectionPoint_iface
);
247 static inline ScriptHost
*impl_from_IActiveScriptSite(IActiveScriptSite
*iface
)
249 return CONTAINING_RECORD(iface
, ScriptHost
, IActiveScriptSite_iface
);
252 static inline ScriptHost
*impl_from_IActiveScriptSiteWindow(IActiveScriptSiteWindow
*iface
)
254 return CONTAINING_RECORD(iface
, ScriptHost
, IActiveScriptSiteWindow_iface
);
257 static inline ScriptHost
*impl_from_IServiceProvider(IServiceProvider
*iface
)
259 return CONTAINING_RECORD(iface
, ScriptHost
, IServiceProvider_iface
);
262 /* IActiveScriptSite */
263 static HRESULT WINAPI
ActiveScriptSite_QueryInterface(IActiveScriptSite
*iface
, REFIID riid
, void **ppv
)
265 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
267 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
268 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
269 *ppv
= &This
->IActiveScriptSite_iface
;
270 }else if(IsEqualGUID(&IID_IActiveScriptSite
, riid
)) {
271 TRACE("(%p)->(IID_IActiveScriptSite %p)\n", This
, ppv
);
272 *ppv
= &This
->IActiveScriptSite_iface
;
273 }else if(IsEqualGUID(&IID_IActiveScriptSiteWindow
, riid
)) {
274 TRACE("(%p)->(IID_IActiveScriptSiteWindow %p)\n", This
, ppv
);
275 *ppv
= &This
->IActiveScriptSiteWindow_iface
;
276 }else if(IsEqualGUID(&IID_IServiceProvider
, riid
)) {
277 TRACE("(%p)->(IID_IServiceProvider %p)\n", This
, ppv
);
278 *ppv
= &This
->IServiceProvider_iface
;
280 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
282 return E_NOINTERFACE
;
285 IUnknown_AddRef((IUnknown
*)*ppv
);
289 static ULONG WINAPI
ActiveScriptSite_AddRef(IActiveScriptSite
*iface
)
291 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
292 LONG ref
= InterlockedIncrement(&This
->ref
);
294 TRACE("(%p) ref=%d\n", This
, ref
);
299 static void release_script_engine(ScriptHost
*host
)
302 IActiveScript_Close(host
->script
);
303 IActiveScript_Release(host
->script
);
307 IActiveScriptParse_Release(host
->parse
);
312 IActiveScriptSite_Release(&host
->IActiveScriptSite_iface
);
315 static ULONG WINAPI
ActiveScriptSite_Release(IActiveScriptSite
*iface
)
317 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
318 LONG ref
= InterlockedDecrement(&This
->ref
);
320 TRACE("(%p) ref=%d\n", This
, ref
);
323 clear_named_items(This
);
330 static HRESULT WINAPI
ActiveScriptSite_GetLCID(IActiveScriptSite
*iface
, LCID
*lcid
)
332 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
334 TRACE("(%p, %p)\n", This
, lcid
);
336 *lcid
= GetUserDefaultLCID();
340 static HRESULT WINAPI
ActiveScriptSite_GetItemInfo(IActiveScriptSite
*iface
, LPCOLESTR name
, DWORD mask
,
341 IUnknown
**unk
, ITypeInfo
**ti
)
343 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
344 struct named_item
*item
;
346 TRACE("(%p, %s, %#x, %p, %p)\n", This
, debugstr_w(name
), mask
, unk
, ti
);
348 item
= host_get_named_item(This
, name
);
350 return TYPE_E_ELEMENTNOTFOUND
;
352 if (mask
!= SCRIPTINFO_IUNKNOWN
) {
353 FIXME("mask %#x is not supported\n", mask
);
357 *unk
= (IUnknown
*)item
->disp
;
358 IUnknown_AddRef(*unk
);
363 static HRESULT WINAPI
ActiveScriptSite_GetDocVersionString(IActiveScriptSite
*iface
, BSTR
*version
)
365 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
367 FIXME("(%p, %p)\n", This
, version
);
372 static HRESULT WINAPI
ActiveScriptSite_OnScriptTerminate(IActiveScriptSite
*iface
, const VARIANT
*result
,
375 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
377 FIXME("(%p, %s, %p)\n", This
, debugstr_variant(result
), ei
);
382 static HRESULT WINAPI
ActiveScriptSite_OnStateChange(IActiveScriptSite
*iface
, SCRIPTSTATE state
)
384 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
386 FIXME("(%p, %d)\n", This
, state
);
391 static HRESULT WINAPI
ActiveScriptSite_OnScriptError(IActiveScriptSite
*iface
, IActiveScriptError
*script_error
)
393 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
395 FIXME("(%p, %p)\n", This
, script_error
);
400 static HRESULT WINAPI
ActiveScriptSite_OnEnterScript(IActiveScriptSite
*iface
)
402 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
404 FIXME("(%p)\n", This
);
409 static HRESULT WINAPI
ActiveScriptSite_OnLeaveScript(IActiveScriptSite
*iface
)
411 ScriptHost
*This
= impl_from_IActiveScriptSite(iface
);
413 FIXME("(%p)\n", This
);
418 static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
= {
419 ActiveScriptSite_QueryInterface
,
420 ActiveScriptSite_AddRef
,
421 ActiveScriptSite_Release
,
422 ActiveScriptSite_GetLCID
,
423 ActiveScriptSite_GetItemInfo
,
424 ActiveScriptSite_GetDocVersionString
,
425 ActiveScriptSite_OnScriptTerminate
,
426 ActiveScriptSite_OnStateChange
,
427 ActiveScriptSite_OnScriptError
,
428 ActiveScriptSite_OnEnterScript
,
429 ActiveScriptSite_OnLeaveScript
432 /* IActiveScriptSiteWindow */
433 static HRESULT WINAPI
ActiveScriptSiteWindow_QueryInterface(IActiveScriptSiteWindow
*iface
, REFIID riid
, void **obj
)
435 ScriptHost
*This
= impl_from_IActiveScriptSiteWindow(iface
);
436 return IActiveScriptSite_QueryInterface(&This
->IActiveScriptSite_iface
, riid
, obj
);
439 static ULONG WINAPI
ActiveScriptSiteWindow_AddRef(IActiveScriptSiteWindow
*iface
)
441 ScriptHost
*This
= impl_from_IActiveScriptSiteWindow(iface
);
442 return IActiveScriptSite_AddRef(&This
->IActiveScriptSite_iface
);
445 static ULONG WINAPI
ActiveScriptSiteWindow_Release(IActiveScriptSiteWindow
*iface
)
447 ScriptHost
*This
= impl_from_IActiveScriptSiteWindow(iface
);
448 return IActiveScriptSite_Release(&This
->IActiveScriptSite_iface
);
451 static HRESULT WINAPI
ActiveScriptSiteWindow_GetWindow(IActiveScriptSiteWindow
*iface
, HWND
*hwnd
)
453 ScriptHost
*This
= impl_from_IActiveScriptSiteWindow(iface
);
455 FIXME("(%p, %p)\n", This
, hwnd
);
460 static HRESULT WINAPI
ActiveScriptSiteWindow_EnableModeless(IActiveScriptSiteWindow
*iface
, BOOL enable
)
462 ScriptHost
*This
= impl_from_IActiveScriptSiteWindow(iface
);
464 FIXME("(%p, %d)\n", This
, enable
);
469 static const IActiveScriptSiteWindowVtbl ActiveScriptSiteWindowVtbl
= {
470 ActiveScriptSiteWindow_QueryInterface
,
471 ActiveScriptSiteWindow_AddRef
,
472 ActiveScriptSiteWindow_Release
,
473 ActiveScriptSiteWindow_GetWindow
,
474 ActiveScriptSiteWindow_EnableModeless
477 /* IServiceProvider */
478 static HRESULT WINAPI
ServiceProvider_QueryInterface(IServiceProvider
*iface
, REFIID riid
, void **obj
)
480 ScriptHost
*This
= impl_from_IServiceProvider(iface
);
481 return IActiveScriptSite_QueryInterface(&This
->IActiveScriptSite_iface
, riid
, obj
);
484 static ULONG WINAPI
ServiceProvider_AddRef(IServiceProvider
*iface
)
486 ScriptHost
*This
= impl_from_IServiceProvider(iface
);
487 return IActiveScriptSite_AddRef(&This
->IActiveScriptSite_iface
);
490 static ULONG WINAPI
ServiceProvider_Release(IServiceProvider
*iface
)
492 ScriptHost
*This
= impl_from_IServiceProvider(iface
);
493 return IActiveScriptSite_Release(&This
->IActiveScriptSite_iface
);
496 static HRESULT WINAPI
ServiceProvider_QueryService(IServiceProvider
*iface
, REFGUID service
,
497 REFIID riid
, void **obj
)
499 ScriptHost
*This
= impl_from_IServiceProvider(iface
);
501 FIXME("(%p)->(%s %s %p)\n", This
, debugstr_guid(service
), debugstr_guid(riid
), obj
);
506 static const IServiceProviderVtbl ServiceProviderVtbl
= {
507 ServiceProvider_QueryInterface
,
508 ServiceProvider_AddRef
,
509 ServiceProvider_Release
,
510 ServiceProvider_QueryService
513 static HRESULT
init_script_host(const CLSID
*clsid
, ScriptHost
**ret
)
515 IObjectSafety
*objsafety
;
521 host
= heap_alloc(sizeof(*host
));
523 return E_OUTOFMEMORY
;
525 host
->IActiveScriptSite_iface
.lpVtbl
= &ActiveScriptSiteVtbl
;
526 host
->IActiveScriptSiteWindow_iface
.lpVtbl
= &ActiveScriptSiteWindowVtbl
;
527 host
->IServiceProvider_iface
.lpVtbl
= &ServiceProviderVtbl
;
531 host
->clsid
= *clsid
;
532 list_init(&host
->named_items
);
534 hr
= CoCreateInstance(&host
->clsid
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
535 &IID_IActiveScript
, (void**)&host
->script
);
537 WARN("Failed to create an instance for %s, %#x\n", debugstr_guid(clsid
), hr
);
541 hr
= IActiveScript_QueryInterface(host
->script
, &IID_IObjectSafety
, (void**)&objsafety
);
543 FIXME("Could not get IObjectSafety, %#x\n", hr
);
547 hr
= IObjectSafety_SetInterfaceSafetyOptions(objsafety
, &IID_IActiveScriptParse
, INTERFACESAFE_FOR_UNTRUSTED_DATA
, 0);
548 IObjectSafety_Release(objsafety
);
550 FIXME("SetInterfaceSafetyOptions failed, %#x\n", hr
);
554 hr
= IActiveScript_SetScriptSite(host
->script
, &host
->IActiveScriptSite_iface
);
556 WARN("SetScriptSite failed, %#x\n", hr
);
560 hr
= IActiveScript_QueryInterface(host
->script
, &IID_IActiveScriptParse
, (void**)&host
->parse
);
562 WARN("Failed to get IActiveScriptParse, %#x\n", hr
);
566 hr
= IActiveScriptParse_InitNew(host
->parse
);
568 WARN("InitNew failed, %#x\n", hr
);
576 release_script_engine(host
);
580 static HRESULT WINAPI
ScriptControl_QueryInterface(IScriptControl
*iface
, REFIID riid
, void **ppv
)
582 ScriptControl
*This
= impl_from_IScriptControl(iface
);
584 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
585 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
586 *ppv
= &This
->IScriptControl_iface
;
587 }else if(IsEqualGUID(&IID_IDispatch
, riid
)) {
588 TRACE("(%p)->(IID_IDispatch %p)\n", This
, ppv
);
589 *ppv
= &This
->IScriptControl_iface
;
590 }else if(IsEqualGUID(&IID_IScriptControl
, riid
)) {
591 TRACE("(%p)->(IID_IScriptControl %p)\n", This
, ppv
);
592 *ppv
= &This
->IScriptControl_iface
;
593 }else if(IsEqualGUID(&IID_IOleObject
, riid
)) {
594 TRACE("(%p)->(IID_IOleObject %p)\n", This
, ppv
);
595 *ppv
= &This
->IOleObject_iface
;
596 }else if(IsEqualGUID(&IID_IPersistStreamInit
, riid
)) {
597 TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This
, ppv
);
598 *ppv
= &This
->IPersistStreamInit_iface
;
599 }else if(IsEqualGUID(&IID_IPersist
, riid
)) {
600 TRACE("(%p)->(IID_IPersist %p)\n", This
, ppv
);
601 *ppv
= &This
->IPersistStreamInit_iface
;
602 }else if(IsEqualGUID(&IID_IOleControl
, riid
)) {
603 TRACE("(%p)->(IID_IOleControl %p)\n", This
, ppv
);
604 *ppv
= &This
->IOleControl_iface
;
605 }else if(IsEqualGUID(&IID_IQuickActivate
, riid
)) {
606 TRACE("(%p)->(IID_IQuickActivate %p)\n", This
, ppv
);
607 *ppv
= &This
->IQuickActivate_iface
;
608 }else if(IsEqualGUID(&IID_IViewObject
, riid
)) {
609 TRACE("(%p)->(IID_IViewObject %p)\n", This
, ppv
);
610 *ppv
= &This
->IViewObjectEx_iface
;
611 }else if(IsEqualGUID(&IID_IViewObject2
, riid
)) {
612 TRACE("(%p)->(IID_IViewObject2 %p)\n", This
, ppv
);
613 *ppv
= &This
->IViewObjectEx_iface
;
614 }else if(IsEqualGUID(&IID_IViewObjectEx
, riid
)) {
615 TRACE("(%p)->(IID_IViewObjectEx %p)\n", This
, ppv
);
616 *ppv
= &This
->IViewObjectEx_iface
;
617 }else if(IsEqualGUID(&IID_IPointerInactive
, riid
)) {
618 TRACE("(%p)->(IID_IPointerInactive %p)\n", This
, ppv
);
619 *ppv
= &This
->IPointerInactive_iface
;
620 }else if(IsEqualGUID(&IID_IConnectionPointContainer
, riid
)) {
621 TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This
, ppv
);
622 *ppv
= &This
->IConnectionPointContainer_iface
;
624 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
626 return E_NOINTERFACE
;
629 IUnknown_AddRef((IUnknown
*)*ppv
);
633 static ULONG WINAPI
ScriptControl_AddRef(IScriptControl
*iface
)
635 ScriptControl
*This
= impl_from_IScriptControl(iface
);
636 LONG ref
= InterlockedIncrement(&This
->ref
);
638 TRACE("(%p) ref=%d\n", This
, ref
);
643 static ULONG WINAPI
ScriptControl_Release(IScriptControl
*iface
)
645 ScriptControl
*This
= impl_from_IScriptControl(iface
);
646 LONG ref
= InterlockedDecrement(&This
->ref
);
648 TRACE("(%p) ref=%d\n", This
, ref
);
652 IOleClientSite_Release(This
->site
);
654 release_script_engine(This
->host
);
661 static HRESULT WINAPI
ScriptControl_GetTypeInfoCount(IScriptControl
*iface
, UINT
*pctinfo
)
663 ScriptControl
*This
= impl_from_IScriptControl(iface
);
664 TRACE("(%p)->(%p)\n", This
, pctinfo
);
669 static HRESULT WINAPI
ScriptControl_GetTypeInfo(IScriptControl
*iface
, UINT iTInfo
,
670 LCID lcid
, ITypeInfo
**ppTInfo
)
672 ScriptControl
*This
= impl_from_IScriptControl(iface
);
673 TRACE("(%p)->(%u %u %p)\n", This
, iTInfo
, lcid
, ppTInfo
);
674 return get_typeinfo(IScriptControl_tid
, ppTInfo
);
677 static HRESULT WINAPI
ScriptControl_GetIDsOfNames(IScriptControl
*iface
, REFIID riid
,
678 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
680 ScriptControl
*This
= impl_from_IScriptControl(iface
);
684 TRACE("(%p)->(%s %p %u %u %p)\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
686 hres
= get_typeinfo(IScriptControl_tid
, &typeinfo
);
687 if(SUCCEEDED(hres
)) {
688 hres
= ITypeInfo_GetIDsOfNames(typeinfo
, rgszNames
, cNames
, rgDispId
);
689 ITypeInfo_Release(typeinfo
);
695 static HRESULT WINAPI
ScriptControl_Invoke(IScriptControl
*iface
, DISPID dispIdMember
,
696 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
697 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
699 ScriptControl
*This
= impl_from_IScriptControl(iface
);
703 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This
, dispIdMember
, debugstr_guid(riid
),
704 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
706 hres
= get_typeinfo(IScriptControl_tid
, &typeinfo
);
707 if(SUCCEEDED(hres
)) {
708 hres
= ITypeInfo_Invoke(typeinfo
, iface
, dispIdMember
, wFlags
,
709 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
710 ITypeInfo_Release(typeinfo
);
716 static HRESULT WINAPI
ScriptControl_get_Language(IScriptControl
*iface
, BSTR
*p
)
718 ScriptControl
*This
= impl_from_IScriptControl(iface
);
722 TRACE("(%p)->(%p)\n", This
, p
);
732 hr
= ProgIDFromCLSID(&This
->host
->clsid
, &progidW
);
736 *p
= SysAllocString(progidW
);
737 CoTaskMemFree(progidW
);
738 return *p
? S_OK
: E_OUTOFMEMORY
;
741 static HRESULT WINAPI
ScriptControl_put_Language(IScriptControl
*iface
, BSTR language
)
743 ScriptControl
*This
= impl_from_IScriptControl(iface
);
746 TRACE("(%p)->(%s)\n", This
, debugstr_w(language
));
748 if (language
&& FAILED(CLSIDFromProgID(language
, &clsid
)))
749 return CTL_E_INVALIDPROPERTYVALUE
;
752 release_script_engine(This
->host
);
759 return init_script_host(&clsid
, &This
->host
);
762 static HRESULT WINAPI
ScriptControl_get_State(IScriptControl
*iface
, ScriptControlStates
*p
)
764 ScriptControl
*This
= impl_from_IScriptControl(iface
);
765 TRACE("(%p)->(%p)\n", This
, p
);
777 static HRESULT WINAPI
ScriptControl_put_State(IScriptControl
*iface
, ScriptControlStates state
)
779 ScriptControl
*This
= impl_from_IScriptControl(iface
);
780 TRACE("(%p)->(%x)\n", This
, state
);
785 if(state
!= Initialized
&& state
!= Connected
)
786 return CTL_E_INVALIDPROPERTYVALUE
;
792 static HRESULT WINAPI
ScriptControl_put_SitehWnd(IScriptControl
*iface
, LONG hwnd
)
794 ScriptControl
*This
= impl_from_IScriptControl(iface
);
795 FIXME("(%p)->(%x)\n", This
, hwnd
);
799 static HRESULT WINAPI
ScriptControl_get_SitehWnd(IScriptControl
*iface
, LONG
*p
)
801 ScriptControl
*This
= impl_from_IScriptControl(iface
);
802 FIXME("(%p)->(%p)\n", This
, p
);
806 static HRESULT WINAPI
ScriptControl_get_Timeout(IScriptControl
*iface
, LONG
*p
)
808 ScriptControl
*This
= impl_from_IScriptControl(iface
);
810 TRACE("(%p)->(%p)\n", This
, p
);
819 static HRESULT WINAPI
ScriptControl_put_Timeout(IScriptControl
*iface
, LONG timeout
)
821 ScriptControl
*This
= impl_from_IScriptControl(iface
);
823 TRACE("(%p)->(%d)\n", This
, timeout
);
826 return CTL_E_INVALIDPROPERTYVALUE
;
829 FIXME("execution timeout ignored\n");
831 This
->timeout
= timeout
;
835 static HRESULT WINAPI
ScriptControl_get_AllowUI(IScriptControl
*iface
, VARIANT_BOOL
*p
)
837 ScriptControl
*This
= impl_from_IScriptControl(iface
);
838 TRACE("(%p)->(%p)\n", This
, p
);
847 static HRESULT WINAPI
ScriptControl_put_AllowUI(IScriptControl
*iface
, VARIANT_BOOL allow_ui
)
849 ScriptControl
*This
= impl_from_IScriptControl(iface
);
850 TRACE("(%p)->(%x)\n", This
, allow_ui
);
852 This
->allow_ui
= allow_ui
;
856 static HRESULT WINAPI
ScriptControl_get_UseSafeSubset(IScriptControl
*iface
, VARIANT_BOOL
*p
)
858 ScriptControl
*This
= impl_from_IScriptControl(iface
);
859 TRACE("(%p)->(%p)\n", This
, p
);
864 *p
= This
->use_safe_subset
;
868 static HRESULT WINAPI
ScriptControl_put_UseSafeSubset(IScriptControl
*iface
, VARIANT_BOOL use_safe_subset
)
870 ScriptControl
*This
= impl_from_IScriptControl(iface
);
871 TRACE("(%p)->(%x)\n", This
, use_safe_subset
);
873 This
->use_safe_subset
= use_safe_subset
;
877 static HRESULT WINAPI
ScriptControl_get_Modules(IScriptControl
*iface
, IScriptModuleCollection
**p
)
879 ScriptControl
*This
= impl_from_IScriptControl(iface
);
880 FIXME("(%p)->(%p)\n", This
, p
);
884 static HRESULT WINAPI
ScriptControl_get_Error(IScriptControl
*iface
, IScriptError
**p
)
886 ScriptControl
*This
= impl_from_IScriptControl(iface
);
887 FIXME("(%p)->(%p)\n", This
, p
);
891 static HRESULT WINAPI
ScriptControl_get_CodeObject(IScriptControl
*iface
, IDispatch
**p
)
893 ScriptControl
*This
= impl_from_IScriptControl(iface
);
894 FIXME("(%p)->(%p)\n", This
, p
);
898 static HRESULT WINAPI
ScriptControl_get_Procedures(IScriptControl
*iface
, IScriptProcedureCollection
**p
)
900 ScriptControl
*This
= impl_from_IScriptControl(iface
);
901 FIXME("(%p)->(%p)\n", This
, p
);
905 static HRESULT WINAPI
ScriptControl__AboutBox(IScriptControl
*iface
)
907 ScriptControl
*This
= impl_from_IScriptControl(iface
);
908 FIXME("(%p)\n", This
);
912 static HRESULT WINAPI
ScriptControl_AddObject(IScriptControl
*iface
, BSTR name
, IDispatch
*object
, VARIANT_BOOL add_members
)
914 ScriptControl
*This
= impl_from_IScriptControl(iface
);
915 DWORD flags
= SCRIPTITEM_ISVISIBLE
| SCRIPTITEM_ISSOURCE
;
916 struct named_item
*item
;
919 TRACE("(%p)->(%s %p %x)\n", This
, debugstr_w(name
), object
, add_members
);
927 if (host_get_named_item(This
->host
, name
))
930 item
= heap_alloc(sizeof(*item
));
932 return E_OUTOFMEMORY
;
934 item
->name
= SysAllocString(name
);
935 IDispatch_AddRef(item
->disp
= object
);
936 list_add_tail(&This
->host
->named_items
, &item
->entry
);
939 flags
|= SCRIPTITEM_GLOBALMEMBERS
;
940 hr
= IActiveScript_AddNamedItem(This
->host
->script
, name
, flags
);
942 list_remove(&item
->entry
);
943 IDispatch_Release(item
->disp
);
944 SysFreeString(item
->name
);
953 static HRESULT WINAPI
ScriptControl_Reset(IScriptControl
*iface
)
955 ScriptControl
*This
= impl_from_IScriptControl(iface
);
957 TRACE("(%p)\n", This
);
962 clear_named_items(This
->host
);
963 return IActiveScript_SetScriptState(This
->host
->script
, SCRIPTSTATE_INITIALIZED
);
966 static HRESULT WINAPI
ScriptControl_AddCode(IScriptControl
*iface
, BSTR code
)
968 ScriptControl
*This
= impl_from_IScriptControl(iface
);
969 FIXME("(%p)->(%s)\n", This
, debugstr_w(code
));
973 static HRESULT WINAPI
ScriptControl_Eval(IScriptControl
*iface
, BSTR expression
, VARIANT
*res
)
975 ScriptControl
*This
= impl_from_IScriptControl(iface
);
976 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(expression
), res
);
980 static HRESULT WINAPI
ScriptControl_ExecuteStatement(IScriptControl
*iface
, BSTR statement
)
982 ScriptControl
*This
= impl_from_IScriptControl(iface
);
983 FIXME("(%p)->(%s)\n", This
, debugstr_w(statement
));
987 static HRESULT WINAPI
ScriptControl_Run(IScriptControl
*iface
, BSTR procedure_name
, SAFEARRAY
**parameters
, VARIANT
*res
)
989 ScriptControl
*This
= impl_from_IScriptControl(iface
);
990 FIXME("(%p)->(%s %p %p)\n", This
, debugstr_w(procedure_name
), parameters
, res
);
994 static const IScriptControlVtbl ScriptControlVtbl
= {
995 ScriptControl_QueryInterface
,
996 ScriptControl_AddRef
,
997 ScriptControl_Release
,
998 ScriptControl_GetTypeInfoCount
,
999 ScriptControl_GetTypeInfo
,
1000 ScriptControl_GetIDsOfNames
,
1001 ScriptControl_Invoke
,
1002 ScriptControl_get_Language
,
1003 ScriptControl_put_Language
,
1004 ScriptControl_get_State
,
1005 ScriptControl_put_State
,
1006 ScriptControl_put_SitehWnd
,
1007 ScriptControl_get_SitehWnd
,
1008 ScriptControl_get_Timeout
,
1009 ScriptControl_put_Timeout
,
1010 ScriptControl_get_AllowUI
,
1011 ScriptControl_put_AllowUI
,
1012 ScriptControl_get_UseSafeSubset
,
1013 ScriptControl_put_UseSafeSubset
,
1014 ScriptControl_get_Modules
,
1015 ScriptControl_get_Error
,
1016 ScriptControl_get_CodeObject
,
1017 ScriptControl_get_Procedures
,
1018 ScriptControl__AboutBox
,
1019 ScriptControl_AddObject
,
1020 ScriptControl_Reset
,
1021 ScriptControl_AddCode
,
1023 ScriptControl_ExecuteStatement
,
1027 static HRESULT WINAPI
OleObject_QueryInterface(IOleObject
*iface
, REFIID riid
, void **obj
)
1029 ScriptControl
*This
= impl_from_IOleObject(iface
);
1030 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1033 static ULONG WINAPI
OleObject_AddRef(IOleObject
*iface
)
1035 ScriptControl
*This
= impl_from_IOleObject(iface
);
1036 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1039 static ULONG WINAPI
OleObject_Release(IOleObject
*iface
)
1041 ScriptControl
*This
= impl_from_IOleObject(iface
);
1042 return IScriptControl_Release(&This
->IScriptControl_iface
);
1045 static HRESULT WINAPI
OleObject_SetClientSite(IOleObject
*iface
, IOleClientSite
*site
)
1047 ScriptControl
*This
= impl_from_IOleObject(iface
);
1049 TRACE("(%p)->(%p)\n", This
, site
);
1052 IOleClientSite_Release(This
->site
);
1054 if ((This
->site
= site
))
1055 IOleClientSite_AddRef(site
);
1060 static HRESULT WINAPI
OleObject_GetClientSite(IOleObject
*iface
, IOleClientSite
**site
)
1062 ScriptControl
*This
= impl_from_IOleObject(iface
);
1064 TRACE("(%p)->(%p)\n", This
, site
);
1069 if ((*site
= This
->site
))
1070 IOleClientSite_AddRef(*site
);
1075 static HRESULT WINAPI
OleObject_SetHostNames(IOleObject
*iface
, LPCOLESTR containerapp
, LPCOLESTR containerobj
)
1077 ScriptControl
*This
= impl_from_IOleObject(iface
);
1079 FIXME("(%p)->(%s %s)\n", This
, debugstr_w(containerapp
), debugstr_w(containerobj
));
1084 static HRESULT WINAPI
OleObject_Close(IOleObject
*iface
, DWORD save
)
1086 ScriptControl
*This
= impl_from_IOleObject(iface
);
1088 FIXME("(%p)->(%d)\n", This
, save
);
1093 static HRESULT WINAPI
OleObject_SetMoniker(IOleObject
*iface
, DWORD which
, IMoniker
*moniker
)
1095 ScriptControl
*This
= impl_from_IOleObject(iface
);
1097 FIXME("(%p)->(%d %p)\n", This
, which
, moniker
);
1102 static HRESULT WINAPI
OleObject_GetMoniker(IOleObject
*iface
, DWORD assign
, DWORD which
, IMoniker
**moniker
)
1104 ScriptControl
*This
= impl_from_IOleObject(iface
);
1106 FIXME("(%p)->(%d %d %p)\n", This
, assign
, which
, moniker
);
1111 static HRESULT WINAPI
OleObject_InitFromData(IOleObject
*iface
, IDataObject
*dataobj
, BOOL creation
,
1114 ScriptControl
*This
= impl_from_IOleObject(iface
);
1116 FIXME("(%p)->(%p %d %d)\n", This
, dataobj
, creation
, reserved
);
1121 static HRESULT WINAPI
OleObject_GetClipboardData(IOleObject
*iface
, DWORD reserved
, IDataObject
**dataobj
)
1123 ScriptControl
*This
= impl_from_IOleObject(iface
);
1125 FIXME("(%p)->(%d %p)\n", This
, reserved
, dataobj
);
1130 static HRESULT WINAPI
OleObject_DoVerb(IOleObject
*iface
, LONG verb
, LPMSG msg
, IOleClientSite
*active_site
,
1131 LONG index
, HWND hwndParent
, LPCRECT rect
)
1133 ScriptControl
*This
= impl_from_IOleObject(iface
);
1135 FIXME("(%p)->(%d %p %p %d %p %p)\n", This
, verb
, msg
, active_site
, index
, hwndParent
, rect
);
1140 static HRESULT WINAPI
OleObject_EnumVerbs(IOleObject
*iface
, IEnumOLEVERB
**enumoleverb
)
1142 ScriptControl
*This
= impl_from_IOleObject(iface
);
1144 FIXME("(%p)->(%p)\n", This
, enumoleverb
);
1149 static HRESULT WINAPI
OleObject_Update(IOleObject
*iface
)
1151 ScriptControl
*This
= impl_from_IOleObject(iface
);
1153 FIXME("(%p)\n", This
);
1158 static HRESULT WINAPI
OleObject_IsUpToDate(IOleObject
*iface
)
1160 ScriptControl
*This
= impl_from_IOleObject(iface
);
1162 FIXME("(%p)\n", This
);
1167 static HRESULT WINAPI
OleObject_GetUserClassID(IOleObject
*iface
, CLSID
*clsid
)
1169 ScriptControl
*This
= impl_from_IOleObject(iface
);
1171 FIXME("(%p)->(%p)\n", This
, clsid
);
1176 static HRESULT WINAPI
OleObject_GetUserType(IOleObject
*iface
, DWORD form_of_type
, LPOLESTR
*usertype
)
1178 ScriptControl
*This
= impl_from_IOleObject(iface
);
1180 FIXME("(%p)->(%d %p)\n", This
, form_of_type
, usertype
);
1185 static HRESULT WINAPI
OleObject_SetExtent(IOleObject
*iface
, DWORD aspect
, SIZEL
*size
)
1187 ScriptControl
*This
= impl_from_IOleObject(iface
);
1189 FIXME("(%p)->(%d %p)\n", This
, aspect
, size
);
1194 static HRESULT WINAPI
OleObject_GetExtent(IOleObject
*iface
, DWORD aspect
, SIZEL
*size
)
1196 ScriptControl
*This
= impl_from_IOleObject(iface
);
1198 TRACE("(%p)->(%d %p)\n", This
, aspect
, size
);
1200 if (aspect
!= DVASPECT_CONTENT
)
1201 return DV_E_DVASPECT
;
1203 *size
= This
->extent
;
1207 static HRESULT WINAPI
OleObject_Advise(IOleObject
*iface
, IAdviseSink
*sink
, DWORD
*connection
)
1209 ScriptControl
*This
= impl_from_IOleObject(iface
);
1211 FIXME("(%p)->(%p %p)\n", This
, sink
, connection
);
1216 static HRESULT WINAPI
OleObject_Unadvise(IOleObject
*iface
, DWORD connection
)
1218 ScriptControl
*This
= impl_from_IOleObject(iface
);
1220 FIXME("(%p)->(%d)\n", This
, connection
);
1225 static HRESULT WINAPI
OleObject_EnumAdvise(IOleObject
*iface
, IEnumSTATDATA
**enumadvise
)
1227 ScriptControl
*This
= impl_from_IOleObject(iface
);
1229 FIXME("(%p)->(%p)\n", This
, enumadvise
);
1234 static HRESULT WINAPI
OleObject_GetMiscStatus(IOleObject
*iface
, DWORD aspect
, DWORD
*status
)
1236 ScriptControl
*This
= impl_from_IOleObject(iface
);
1238 TRACE("(%p)->(%d %p)\n", This
, aspect
, status
);
1240 return OleRegGetMiscStatus(&CLSID_ScriptControl
, aspect
, status
);
1243 static HRESULT WINAPI
OleObject_SetColorScheme(IOleObject
*iface
, LOGPALETTE
*logpal
)
1245 ScriptControl
*This
= impl_from_IOleObject(iface
);
1247 FIXME("(%p)->(%p)\n", This
, logpal
);
1252 static const IOleObjectVtbl OleObjectVtbl
= {
1253 OleObject_QueryInterface
,
1256 OleObject_SetClientSite
,
1257 OleObject_GetClientSite
,
1258 OleObject_SetHostNames
,
1260 OleObject_SetMoniker
,
1261 OleObject_GetMoniker
,
1262 OleObject_InitFromData
,
1263 OleObject_GetClipboardData
,
1265 OleObject_EnumVerbs
,
1267 OleObject_IsUpToDate
,
1268 OleObject_GetUserClassID
,
1269 OleObject_GetUserType
,
1270 OleObject_SetExtent
,
1271 OleObject_GetExtent
,
1274 OleObject_EnumAdvise
,
1275 OleObject_GetMiscStatus
,
1276 OleObject_SetColorScheme
1279 static HRESULT WINAPI
PersistStreamInit_QueryInterface(IPersistStreamInit
*iface
, REFIID riid
, void **obj
)
1281 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1282 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1285 static ULONG WINAPI
PersistStreamInit_AddRef(IPersistStreamInit
*iface
)
1287 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1288 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1291 static ULONG WINAPI
PersistStreamInit_Release(IPersistStreamInit
*iface
)
1293 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1294 return IScriptControl_Release(&This
->IScriptControl_iface
);
1297 static HRESULT WINAPI
PersistStreamInit_GetClassID(IPersistStreamInit
*iface
, CLSID
*clsid
)
1299 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1301 FIXME("(%p)->(%p)\n", This
, clsid
);
1306 static HRESULT WINAPI
PersistStreamInit_IsDirty(IPersistStreamInit
*iface
)
1308 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1310 FIXME("(%p)\n", This
);
1315 static HRESULT WINAPI
PersistStreamInit_Load(IPersistStreamInit
*iface
, IStream
*stream
)
1317 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1319 FIXME("(%p)->(%p)\n", This
, stream
);
1324 static HRESULT WINAPI
PersistStreamInit_Save(IPersistStreamInit
*iface
, IStream
*stream
, BOOL clear_dirty
)
1326 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1328 FIXME("(%p)->(%p %d)\n", This
, stream
, clear_dirty
);
1333 static HRESULT WINAPI
PersistStreamInit_GetSizeMax(IPersistStreamInit
*iface
, ULARGE_INTEGER
*size
)
1335 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1337 FIXME("(%p)->(%p)\n", This
, size
);
1342 static HRESULT WINAPI
PersistStreamInit_InitNew(IPersistStreamInit
*iface
)
1344 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
1346 FIXME("(%p)\n", This
);
1351 static const IPersistStreamInitVtbl PersistStreamInitVtbl
= {
1352 PersistStreamInit_QueryInterface
,
1353 PersistStreamInit_AddRef
,
1354 PersistStreamInit_Release
,
1355 PersistStreamInit_GetClassID
,
1356 PersistStreamInit_IsDirty
,
1357 PersistStreamInit_Load
,
1358 PersistStreamInit_Save
,
1359 PersistStreamInit_GetSizeMax
,
1360 PersistStreamInit_InitNew
1363 static HRESULT WINAPI
OleControl_QueryInterface(IOleControl
*iface
, REFIID riid
, void **obj
)
1365 ScriptControl
*This
= impl_from_IOleControl(iface
);
1366 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1369 static ULONG WINAPI
OleControl_AddRef(IOleControl
*iface
)
1371 ScriptControl
*This
= impl_from_IOleControl(iface
);
1372 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1375 static ULONG WINAPI
OleControl_Release(IOleControl
*iface
)
1377 ScriptControl
*This
= impl_from_IOleControl(iface
);
1378 return IScriptControl_Release(&This
->IScriptControl_iface
);
1381 static HRESULT WINAPI
OleControl_GetControlInfo(IOleControl
*iface
, CONTROLINFO
*info
)
1383 ScriptControl
*This
= impl_from_IOleControl(iface
);
1385 TRACE("(%p)->(%p)\n", This
, info
);
1390 info
->hAccel
= NULL
;
1396 static HRESULT WINAPI
OleControl_OnMnemonic(IOleControl
*iface
, MSG
*msg
)
1398 ScriptControl
*This
= impl_from_IOleControl(iface
);
1400 FIXME("(%p)->(%p)\n", This
, msg
);
1405 static HRESULT WINAPI
OleControl_OnAmbientPropertyChange(IOleControl
*iface
, DISPID dispid
)
1407 ScriptControl
*This
= impl_from_IOleControl(iface
);
1409 FIXME("(%p)->(%#x)\n", This
, dispid
);
1414 static HRESULT WINAPI
OleControl_FreezeEvents(IOleControl
*iface
, BOOL freeze
)
1416 ScriptControl
*This
= impl_from_IOleControl(iface
);
1418 FIXME("(%p)->(%d)\n", This
, freeze
);
1423 static const IOleControlVtbl OleControlVtbl
= {
1424 OleControl_QueryInterface
,
1427 OleControl_GetControlInfo
,
1428 OleControl_OnMnemonic
,
1429 OleControl_OnAmbientPropertyChange
,
1430 OleControl_FreezeEvents
1433 static HRESULT WINAPI
QuickActivate_QueryInterface(IQuickActivate
*iface
, REFIID riid
, void **obj
)
1435 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
1436 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1439 static ULONG WINAPI
QuickActivate_AddRef(IQuickActivate
*iface
)
1441 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
1442 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1445 static ULONG WINAPI
QuickActivate_Release(IQuickActivate
*iface
)
1447 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
1448 return IScriptControl_Release(&This
->IScriptControl_iface
);
1451 static HRESULT WINAPI
QuickActivate_QuickActivate(IQuickActivate
*iface
, QACONTAINER
*container
, QACONTROL
*control
)
1453 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
1455 FIXME("(%p)->(%p %p)\n", This
, container
, control
);
1460 static HRESULT WINAPI
QuickActivate_SetContentExtent(IQuickActivate
*iface
, SIZEL
*size
)
1462 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
1464 FIXME("(%p)->(%p)\n", This
, size
);
1469 static HRESULT WINAPI
QuickActivate_GetContentExtent(IQuickActivate
*iface
, SIZEL
*size
)
1471 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
1473 FIXME("(%p)->(%p)\n", This
, size
);
1478 static const IQuickActivateVtbl QuickActivateVtbl
= {
1479 QuickActivate_QueryInterface
,
1480 QuickActivate_AddRef
,
1481 QuickActivate_Release
,
1482 QuickActivate_QuickActivate
,
1483 QuickActivate_SetContentExtent
,
1484 QuickActivate_GetContentExtent
1487 static HRESULT WINAPI
ViewObject_QueryInterface(IViewObjectEx
*iface
, REFIID riid
, void **obj
)
1489 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1490 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1493 static ULONG WINAPI
ViewObject_AddRef(IViewObjectEx
*iface
)
1495 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1496 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1499 static ULONG WINAPI
ViewObject_Release(IViewObjectEx
*iface
)
1501 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1502 return IScriptControl_Release(&This
->IScriptControl_iface
);
1505 static HRESULT WINAPI
ViewObject_Draw(IViewObjectEx
*iface
, DWORD drawaspect
, LONG index
, void *aspect
,
1506 DVTARGETDEVICE
*device
, HDC target_dev
, HDC hdc_draw
, const RECTL
*bounds
, const RECTL
*win_bounds
,
1507 BOOL (STDMETHODCALLTYPE
*fn_continue
)(ULONG_PTR cont
), ULONG_PTR cont
)
1509 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1511 FIXME("(%p)->(%d %d %p %p %p %p %p %p %p %lu)\n", This
, drawaspect
, index
, aspect
, device
, target_dev
,
1512 hdc_draw
, bounds
, win_bounds
, fn_continue
, cont
);
1517 static HRESULT WINAPI
ViewObject_GetColorSet(IViewObjectEx
*iface
, DWORD drawaspect
, LONG index
, void *aspect
,
1518 DVTARGETDEVICE
*device
, HDC hic_target
, LOGPALETTE
**colorset
)
1520 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1522 FIXME("(%p)->(%d %d %p %p %p %p)\n", This
, drawaspect
, index
, aspect
, device
, hic_target
,
1528 static HRESULT WINAPI
ViewObject_Freeze(IViewObjectEx
*iface
, DWORD drawaspect
, LONG index
, void *aspect
,
1531 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1533 FIXME("(%p)->(%d %d %p %p)\n", This
, drawaspect
, index
, aspect
, freeze
);
1538 static HRESULT WINAPI
ViewObject_Unfreeze(IViewObjectEx
*iface
, DWORD freeze
)
1540 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1542 FIXME("(%p)->(%d)\n", This
, freeze
);
1547 static HRESULT WINAPI
ViewObject_SetAdvise(IViewObjectEx
*iface
, DWORD aspects
, DWORD flags
, IAdviseSink
*sink
)
1549 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1551 TRACE("(%p)->(%d %#x %p)\n", This
, aspects
, flags
, sink
);
1553 if (aspects
!= DVASPECT_CONTENT
)
1554 return DV_E_DVASPECT
;
1556 This
->view_sink_flags
= flags
;
1557 if (This
->view_sink
)
1558 IAdviseSink_Release(This
->view_sink
);
1559 This
->view_sink
= sink
;
1560 if (This
->view_sink
)
1561 IAdviseSink_AddRef(This
->view_sink
);
1566 static HRESULT WINAPI
ViewObject_GetAdvise(IViewObjectEx
*iface
, DWORD
*aspects
, DWORD
*flags
, IAdviseSink
**sink
)
1568 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1570 TRACE("(%p)->(%p %p %p)\n", This
, aspects
, flags
, sink
);
1573 *aspects
= DVASPECT_CONTENT
;
1575 *flags
= This
->view_sink_flags
;
1577 *sink
= This
->view_sink
;
1579 IAdviseSink_AddRef(*sink
);
1585 static HRESULT WINAPI
ViewObject_GetExtent(IViewObjectEx
*iface
, DWORD draw_aspect
, LONG index
,
1586 DVTARGETDEVICE
*device
, SIZEL
*size
)
1588 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1590 FIXME("(%p)->(%d %d %p %p)\n", This
, draw_aspect
, index
, device
, size
);
1595 static HRESULT WINAPI
ViewObject_GetRect(IViewObjectEx
*iface
, DWORD aspect
, RECTL
*rect
)
1597 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1599 FIXME("(%p)->(%d %p)\n", This
, aspect
, rect
);
1604 static HRESULT WINAPI
ViewObject_GetViewStatus(IViewObjectEx
*iface
, DWORD
*status
)
1606 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1608 TRACE("(%p)->(%p)\n", This
, status
);
1610 *status
= VIEWSTATUS_OPAQUE
;
1614 static HRESULT WINAPI
ViewObject_QueryHitPoint(IViewObjectEx
*iface
, DWORD aspect
, const RECT
*bounds
,
1615 POINT pt
, LONG close_hint
, DWORD
*hit_result
)
1617 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1619 FIXME("(%p)->(%d %s %s %d %p)\n", This
, aspect
, wine_dbgstr_rect(bounds
), wine_dbgstr_point(&pt
), close_hint
, hit_result
);
1624 static HRESULT WINAPI
ViewObject_QueryHitRect(IViewObjectEx
*iface
, DWORD aspect
, const RECT
*bounds
,
1625 const RECT
*loc
, LONG close_hint
, DWORD
*hit_result
)
1627 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1629 FIXME("(%p)->(%d %s %s %d %p)\n", This
, aspect
, wine_dbgstr_rect(bounds
), wine_dbgstr_rect(loc
), close_hint
, hit_result
);
1634 static HRESULT WINAPI
ViewObject_GetNaturalExtent(IViewObjectEx
*iface
, DWORD aspect
, LONG index
,
1635 DVTARGETDEVICE
*device
, HDC target_hdc
, DVEXTENTINFO
*extent_info
, SIZEL
*size
)
1637 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1639 FIXME("(%p)->(%d %d %p %p %p %p)\n", This
, aspect
, index
, device
, target_hdc
, extent_info
, size
);
1644 static const IViewObjectExVtbl ViewObjectExVtbl
= {
1645 ViewObject_QueryInterface
,
1649 ViewObject_GetColorSet
,
1651 ViewObject_Unfreeze
,
1652 ViewObject_SetAdvise
,
1653 ViewObject_GetAdvise
,
1654 ViewObject_GetExtent
,
1656 ViewObject_GetViewStatus
,
1657 ViewObject_QueryHitPoint
,
1658 ViewObject_QueryHitRect
,
1659 ViewObject_GetNaturalExtent
1662 static HRESULT WINAPI
PointerInactive_QueryInterface(IPointerInactive
*iface
, REFIID riid
, void **obj
)
1664 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1665 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1668 static ULONG WINAPI
PointerInactive_AddRef(IPointerInactive
*iface
)
1670 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1671 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1674 static ULONG WINAPI
PointerInactive_Release(IPointerInactive
*iface
)
1676 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1677 return IScriptControl_Release(&This
->IScriptControl_iface
);
1680 static HRESULT WINAPI
PointerInactive_GetActivationPolicy(IPointerInactive
*iface
, DWORD
*policy
)
1682 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1684 TRACE("(%p)->(%p)\n", This
, policy
);
1693 static HRESULT WINAPI
PointerInactive_OnInactiveMouseMove(IPointerInactive
*iface
, const RECT
*bounds
,
1694 LONG x
, LONG y
, DWORD key_state
)
1696 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1698 FIXME("(%p)->(%s %d %d %#x)\n", This
, wine_dbgstr_rect(bounds
), x
, y
, key_state
);
1703 static HRESULT WINAPI
PointerInactive_OnInactiveSetCursor(IPointerInactive
*iface
, const RECT
*bounds
,
1704 LONG x
, LONG y
, DWORD msg
, BOOL set_always
)
1706 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1708 FIXME("(%p)->(%s %d %d %#x %d)\n", This
, wine_dbgstr_rect(bounds
), x
, y
, msg
, set_always
);
1713 static const IPointerInactiveVtbl PointerInactiveVtbl
= {
1714 PointerInactive_QueryInterface
,
1715 PointerInactive_AddRef
,
1716 PointerInactive_Release
,
1717 PointerInactive_GetActivationPolicy
,
1718 PointerInactive_OnInactiveMouseMove
,
1719 PointerInactive_OnInactiveSetCursor
1722 static HRESULT WINAPI
ConnectionPointContainer_QueryInterface(IConnectionPointContainer
*iface
, REFIID riid
, void **obj
)
1724 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1725 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1728 static ULONG WINAPI
ConnectionPointContainer_AddRef(IConnectionPointContainer
*iface
)
1730 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1731 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1734 static ULONG WINAPI
ConnectionPointContainer_Release(IConnectionPointContainer
*iface
)
1736 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1737 return IScriptControl_Release(&This
->IScriptControl_iface
);
1740 static HRESULT WINAPI
ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer
*iface
, IEnumConnectionPoints
**enum_points
)
1742 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1744 FIXME("(%p)->(%p)\n", This
, enum_points
);
1749 static HRESULT WINAPI
ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer
*iface
, REFIID riid
, IConnectionPoint
**cp
)
1751 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1752 ConnectionPoint
*iter
;
1754 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), cp
);
1758 for (iter
= This
->cp_list
; iter
; iter
= iter
->next
) {
1759 if (IsEqualIID(iter
->riid
, riid
))
1760 *cp
= &iter
->IConnectionPoint_iface
;
1764 IConnectionPoint_AddRef(*cp
);
1768 FIXME("unsupported connection point %s\n", debugstr_guid(riid
));
1769 return CONNECT_E_NOCONNECTION
;
1772 static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl
= {
1773 ConnectionPointContainer_QueryInterface
,
1774 ConnectionPointContainer_AddRef
,
1775 ConnectionPointContainer_Release
,
1776 ConnectionPointContainer_EnumConnectionPoints
,
1777 ConnectionPointContainer_FindConnectionPoint
1780 static HRESULT WINAPI
ConnectionPoint_QueryInterface(IConnectionPoint
*iface
,
1781 REFIID riid
, void **ppv
)
1783 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1785 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1786 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
1787 *ppv
= &This
->IConnectionPoint_iface
;
1788 }else if(IsEqualGUID(&IID_IConnectionPoint
, riid
)) {
1789 TRACE("(%p)->(IID_IDispatch %p)\n", This
, ppv
);
1790 *ppv
= &This
->IConnectionPoint_iface
;
1792 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
1794 return E_NOINTERFACE
;
1797 IUnknown_AddRef((IUnknown
*)*ppv
);
1801 static ULONG WINAPI
ConnectionPoint_AddRef(IConnectionPoint
*iface
)
1803 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1804 return IConnectionPointContainer_AddRef(&This
->control
->IConnectionPointContainer_iface
);
1807 static ULONG WINAPI
ConnectionPoint_Release(IConnectionPoint
*iface
)
1809 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1810 return IConnectionPointContainer_Release(&This
->control
->IConnectionPointContainer_iface
);
1813 static HRESULT WINAPI
ConnectionPoint_GetConnectionInterface(IConnectionPoint
*iface
, IID
*iid
)
1815 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1817 TRACE("(%p)->(%p)\n", This
, iid
);
1823 static HRESULT WINAPI
ConnectionPoint_GetConnectionPointContainer(IConnectionPoint
*iface
,
1824 IConnectionPointContainer
**container
)
1826 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1828 TRACE("(%p)->(%p)\n", This
, container
);
1833 *container
= &This
->control
->IConnectionPointContainer_iface
;
1834 IConnectionPointContainer_AddRef(*container
);
1839 static HRESULT WINAPI
ConnectionPoint_Advise(IConnectionPoint
*iface
, IUnknown
*unk_sink
,
1842 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1844 FIXME("(%p)->(%p %p)\n", This
, unk_sink
, cookie
);
1849 static HRESULT WINAPI
ConnectionPoint_Unadvise(IConnectionPoint
*iface
, DWORD cookie
)
1851 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1853 FIXME("(%p)->(%d)\n", This
, cookie
);
1858 static HRESULT WINAPI
ConnectionPoint_EnumConnections(IConnectionPoint
*iface
,
1859 IEnumConnections
**ppEnum
)
1861 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1863 FIXME("(%p)->(%p): stub\n", This
, ppEnum
);
1868 static const IConnectionPointVtbl ConnectionPointVtbl
=
1870 ConnectionPoint_QueryInterface
,
1871 ConnectionPoint_AddRef
,
1872 ConnectionPoint_Release
,
1873 ConnectionPoint_GetConnectionInterface
,
1874 ConnectionPoint_GetConnectionPointContainer
,
1875 ConnectionPoint_Advise
,
1876 ConnectionPoint_Unadvise
,
1877 ConnectionPoint_EnumConnections
1880 static void ConnectionPoint_Init(ConnectionPoint
*cp
, ScriptControl
*sc
, REFIID riid
)
1882 cp
->IConnectionPoint_iface
.lpVtbl
= &ConnectionPointVtbl
;
1886 cp
->next
= sc
->cp_list
;
1890 static HRESULT WINAPI
ScriptControl_CreateInstance(IClassFactory
*iface
, IUnknown
*outer
, REFIID riid
, void **ppv
)
1892 ScriptControl
*script_control
;
1897 TRACE("(%p %s %p)\n", outer
, debugstr_guid(riid
), ppv
);
1899 script_control
= heap_alloc(sizeof(*script_control
));
1901 return E_OUTOFMEMORY
;
1903 script_control
->IScriptControl_iface
.lpVtbl
= &ScriptControlVtbl
;
1904 script_control
->IPersistStreamInit_iface
.lpVtbl
= &PersistStreamInitVtbl
;
1905 script_control
->IOleObject_iface
.lpVtbl
= &OleObjectVtbl
;
1906 script_control
->IOleControl_iface
.lpVtbl
= &OleControlVtbl
;
1907 script_control
->IQuickActivate_iface
.lpVtbl
= &QuickActivateVtbl
;
1908 script_control
->IViewObjectEx_iface
.lpVtbl
= &ViewObjectExVtbl
;
1909 script_control
->IPointerInactive_iface
.lpVtbl
= &PointerInactiveVtbl
;
1910 script_control
->IConnectionPointContainer_iface
.lpVtbl
= &ConnectionPointContainerVtbl
;
1911 script_control
->ref
= 1;
1912 script_control
->site
= NULL
;
1913 script_control
->cp_list
= NULL
;
1914 script_control
->host
= NULL
;
1915 script_control
->timeout
= 10000;
1916 script_control
->view_sink_flags
= 0;
1917 script_control
->view_sink
= NULL
;
1918 script_control
->allow_ui
= VARIANT_TRUE
;
1919 script_control
->use_safe_subset
= VARIANT_FALSE
;
1920 script_control
->state
= Initialized
;
1922 ConnectionPoint_Init(&script_control
->cp_scsource
, script_control
, &DIID_DScriptControlSource
);
1923 ConnectionPoint_Init(&script_control
->cp_propnotif
, script_control
, &IID_IPropertyNotifySink
);
1926 dpi_x
= GetDeviceCaps(hdc
, LOGPIXELSX
);
1927 dpi_y
= GetDeviceCaps(hdc
, LOGPIXELSY
);
1930 script_control
->extent
.cx
= MulDiv(38, 2540, dpi_x
);
1931 script_control
->extent
.cy
= MulDiv(38, 2540, dpi_y
);
1933 hres
= IScriptControl_QueryInterface(&script_control
->IScriptControl_iface
, riid
, ppv
);
1934 IScriptControl_Release(&script_control
->IScriptControl_iface
);
1938 /******************************************************************
1939 * DllMain (msscript.ocx.@)
1941 BOOL WINAPI
DllMain(HINSTANCE instance
, DWORD reason
, void *reserved
)
1943 TRACE("(%p %d %p)\n", instance
, reason
, reserved
);
1946 case DLL_WINE_PREATTACH
:
1947 return FALSE
; /* prefer native version */
1948 case DLL_PROCESS_ATTACH
:
1949 msscript_instance
= instance
;
1950 DisableThreadLibraryCalls(instance
);
1952 case DLL_PROCESS_DETACH
:
1961 static HRESULT WINAPI
ClassFactory_QueryInterface(IClassFactory
*iface
, REFIID riid
, void **ppv
)
1965 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1966 TRACE("(%p)->(IID_IUnknown %p)\n", iface
, ppv
);
1968 }else if(IsEqualGUID(&IID_IClassFactory
, riid
)) {
1969 TRACE("(%p)->(IID_IClassFactory %p)\n", iface
, ppv
);
1974 IUnknown_AddRef((IUnknown
*)*ppv
);
1978 WARN("(%p)->(%s %p)\n", iface
, debugstr_guid(riid
), ppv
);
1979 return E_NOINTERFACE
;
1982 static ULONG WINAPI
ClassFactory_AddRef(IClassFactory
*iface
)
1984 TRACE("(%p)\n", iface
);
1988 static ULONG WINAPI
ClassFactory_Release(IClassFactory
*iface
)
1990 TRACE("(%p)\n", iface
);
1994 static HRESULT WINAPI
ClassFactory_LockServer(IClassFactory
*iface
, BOOL fLock
)
1996 TRACE("(%p)->(%x)\n", iface
, fLock
);
2000 static const IClassFactoryVtbl ScriptControlFactoryVtbl
= {
2001 ClassFactory_QueryInterface
,
2002 ClassFactory_AddRef
,
2003 ClassFactory_Release
,
2004 ScriptControl_CreateInstance
,
2005 ClassFactory_LockServer
2008 static IClassFactory ScriptControlFactory
= { &ScriptControlFactoryVtbl
};
2010 /***********************************************************************
2011 * DllGetClassObject (msscript.ocx.@)
2013 HRESULT WINAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
2015 if(IsEqualGUID(&CLSID_ScriptControl
, rclsid
)) {
2016 TRACE("(CLSID_ScriptControl %s %p)\n", debugstr_guid(riid
), ppv
);
2017 return IClassFactory_QueryInterface(&ScriptControlFactory
, riid
, ppv
);
2020 FIXME("%s %s %p\n", debugstr_guid(rclsid
), debugstr_guid(riid
), ppv
);
2021 return CLASS_E_CLASSNOTAVAILABLE
;
2024 /***********************************************************************
2025 * DllCanUnloadNow (msscript.ocx.@)
2027 HRESULT WINAPI
DllCanUnloadNow(void)
2033 /***********************************************************************
2034 * DllRegisterServer (msscript.ocx.@)
2036 HRESULT WINAPI
DllRegisterServer(void)
2039 return __wine_register_resources(msscript_instance
);
2042 /***********************************************************************
2043 * DllUnregisterServer (msscript.ocx.@)
2045 HRESULT WINAPI
DllUnregisterServer(void)
2048 return __wine_unregister_resources(msscript_instance
);