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
28 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msscript
);
33 typedef struct ConnectionPoint ConnectionPoint
;
35 struct ConnectionPoint
{
36 IConnectionPoint IConnectionPoint_iface
;
37 ScriptControl
*control
;
39 ConnectionPoint
*next
;
42 struct ScriptControl
{
43 IScriptControl IScriptControl_iface
;
44 IPersistStreamInit IPersistStreamInit_iface
;
45 IOleObject IOleObject_iface
;
46 IOleControl IOleControl_iface
;
47 IQuickActivate IQuickActivate_iface
;
48 IViewObjectEx IViewObjectEx_iface
;
49 IPointerInactive IPointerInactive_iface
;
50 IConnectionPointContainer IConnectionPointContainer_iface
;
55 /* connection points */
56 ConnectionPoint
*cp_list
;
57 ConnectionPoint cp_scsource
;
58 ConnectionPoint cp_propnotif
;
61 static HINSTANCE msscript_instance
;
63 static inline void * __WINE_ALLOC_SIZE(1) heap_alloc(size_t len
)
65 return HeapAlloc(GetProcessHeap(), 0, len
);
68 static inline BOOL
heap_free(void *mem
)
70 return HeapFree(GetProcessHeap(), 0, mem
);
78 static ITypeLib
*typelib
;
79 static ITypeInfo
*typeinfos
[LAST_tid
];
81 static REFIID tid_ids
[] = {
85 static HRESULT
load_typelib(void)
90 hres
= LoadRegTypeLib(&LIBID_MSScriptControl
, 1, 0, LOCALE_SYSTEM_DEFAULT
, &tl
);
92 ERR("LoadRegTypeLib failed: %08x\n", hres
);
96 if(InterlockedCompareExchangePointer((void**)&typelib
, tl
, NULL
))
101 static HRESULT
get_typeinfo(tid_t tid
, ITypeInfo
**typeinfo
)
106 hres
= load_typelib();
110 if(!typeinfos
[tid
]) {
113 hres
= ITypeLib_GetTypeInfoOfGuid(typelib
, tid_ids
[tid
], &ti
);
115 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids
[tid
]), hres
);
119 if(InterlockedCompareExchangePointer((void**)(typeinfos
+tid
), ti
, NULL
))
120 ITypeInfo_Release(ti
);
123 *typeinfo
= typeinfos
[tid
];
124 ITypeInfo_AddRef(typeinfos
[tid
]);
128 static void release_typelib(void)
135 for(i
=0; i
< sizeof(typeinfos
)/sizeof(*typeinfos
); i
++)
137 ITypeInfo_Release(typeinfos
[i
]);
139 ITypeLib_Release(typelib
);
142 static inline ScriptControl
*impl_from_IScriptControl(IScriptControl
*iface
)
144 return CONTAINING_RECORD(iface
, ScriptControl
, IScriptControl_iface
);
147 static inline ScriptControl
*impl_from_IOleObject(IOleObject
*iface
)
149 return CONTAINING_RECORD(iface
, ScriptControl
, IOleObject_iface
);
152 static inline ScriptControl
*impl_from_IPersistStreamInit(IPersistStreamInit
*iface
)
154 return CONTAINING_RECORD(iface
, ScriptControl
, IPersistStreamInit_iface
);
157 static inline ScriptControl
*impl_from_IOleControl(IOleControl
*iface
)
159 return CONTAINING_RECORD(iface
, ScriptControl
, IOleControl_iface
);
162 static inline ScriptControl
*impl_from_IQuickActivate(IQuickActivate
*iface
)
164 return CONTAINING_RECORD(iface
, ScriptControl
, IQuickActivate_iface
);
167 static inline ScriptControl
*impl_from_IViewObjectEx(IViewObjectEx
*iface
)
169 return CONTAINING_RECORD(iface
, ScriptControl
, IViewObjectEx_iface
);
172 static inline ScriptControl
*impl_from_IPointerInactive(IPointerInactive
*iface
)
174 return CONTAINING_RECORD(iface
, ScriptControl
, IPointerInactive_iface
);
177 static inline ScriptControl
*impl_from_IConnectionPointContainer(IConnectionPointContainer
*iface
)
179 return CONTAINING_RECORD(iface
, ScriptControl
, IConnectionPointContainer_iface
);
182 static inline ConnectionPoint
*impl_from_IConnectionPoint(IConnectionPoint
*iface
)
184 return CONTAINING_RECORD(iface
, ConnectionPoint
, IConnectionPoint_iface
);
187 static HRESULT WINAPI
ScriptControl_QueryInterface(IScriptControl
*iface
, REFIID riid
, void **ppv
)
189 ScriptControl
*This
= impl_from_IScriptControl(iface
);
191 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
192 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
193 *ppv
= &This
->IScriptControl_iface
;
194 }else if(IsEqualGUID(&IID_IDispatch
, riid
)) {
195 TRACE("(%p)->(IID_IDispatch %p)\n", This
, ppv
);
196 *ppv
= &This
->IScriptControl_iface
;
197 }else if(IsEqualGUID(&IID_IScriptControl
, riid
)) {
198 TRACE("(%p)->(IID_IScriptControl %p)\n", This
, ppv
);
199 *ppv
= &This
->IScriptControl_iface
;
200 }else if(IsEqualGUID(&IID_IOleObject
, riid
)) {
201 TRACE("(%p)->(IID_IOleObject %p)\n", This
, ppv
);
202 *ppv
= &This
->IOleObject_iface
;
203 }else if(IsEqualGUID(&IID_IPersistStreamInit
, riid
)) {
204 TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This
, ppv
);
205 *ppv
= &This
->IPersistStreamInit_iface
;
206 }else if(IsEqualGUID(&IID_IPersist
, riid
)) {
207 TRACE("(%p)->(IID_IPersist %p)\n", This
, ppv
);
208 *ppv
= &This
->IPersistStreamInit_iface
;
209 }else if(IsEqualGUID(&IID_IOleControl
, riid
)) {
210 TRACE("(%p)->(IID_IOleControl %p)\n", This
, ppv
);
211 *ppv
= &This
->IOleControl_iface
;
212 }else if(IsEqualGUID(&IID_IQuickActivate
, riid
)) {
213 TRACE("(%p)->(IID_IQuickActivate %p)\n", This
, ppv
);
214 *ppv
= &This
->IQuickActivate_iface
;
215 }else if(IsEqualGUID(&IID_IViewObject
, riid
)) {
216 TRACE("(%p)->(IID_IViewObject %p)\n", This
, ppv
);
217 *ppv
= &This
->IViewObjectEx_iface
;
218 }else if(IsEqualGUID(&IID_IViewObject2
, riid
)) {
219 TRACE("(%p)->(IID_IViewObject2 %p)\n", This
, ppv
);
220 *ppv
= &This
->IViewObjectEx_iface
;
221 }else if(IsEqualGUID(&IID_IViewObjectEx
, riid
)) {
222 TRACE("(%p)->(IID_IViewObjectEx %p)\n", This
, ppv
);
223 *ppv
= &This
->IViewObjectEx_iface
;
224 }else if(IsEqualGUID(&IID_IPointerInactive
, riid
)) {
225 TRACE("(%p)->(IID_IPointerInactive %p)\n", This
, ppv
);
226 *ppv
= &This
->IPointerInactive_iface
;
227 }else if(IsEqualGUID(&IID_IConnectionPointContainer
, riid
)) {
228 TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This
, ppv
);
229 *ppv
= &This
->IConnectionPointContainer_iface
;
231 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
233 return E_NOINTERFACE
;
236 IUnknown_AddRef((IUnknown
*)*ppv
);
240 static ULONG WINAPI
ScriptControl_AddRef(IScriptControl
*iface
)
242 ScriptControl
*This
= impl_from_IScriptControl(iface
);
243 LONG ref
= InterlockedIncrement(&This
->ref
);
245 TRACE("(%p) ref=%d\n", This
, ref
);
250 static ULONG WINAPI
ScriptControl_Release(IScriptControl
*iface
)
252 ScriptControl
*This
= impl_from_IScriptControl(iface
);
253 LONG ref
= InterlockedDecrement(&This
->ref
);
255 TRACE("(%p) ref=%d\n", This
, ref
);
259 IOleClientSite_Release(This
->site
);
266 static HRESULT WINAPI
ScriptControl_GetTypeInfoCount(IScriptControl
*iface
, UINT
*pctinfo
)
268 ScriptControl
*This
= impl_from_IScriptControl(iface
);
269 TRACE("(%p)->(%p)\n", This
, pctinfo
);
274 static HRESULT WINAPI
ScriptControl_GetTypeInfo(IScriptControl
*iface
, UINT iTInfo
,
275 LCID lcid
, ITypeInfo
**ppTInfo
)
277 ScriptControl
*This
= impl_from_IScriptControl(iface
);
278 TRACE("(%p)->(%u %u %p)\n", This
, iTInfo
, lcid
, ppTInfo
);
279 return get_typeinfo(IScriptControl_tid
, ppTInfo
);
282 static HRESULT WINAPI
ScriptControl_GetIDsOfNames(IScriptControl
*iface
, REFIID riid
,
283 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
285 ScriptControl
*This
= impl_from_IScriptControl(iface
);
289 TRACE("(%p)->(%s %p %u %u %p)\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
291 hres
= get_typeinfo(IScriptControl_tid
, &typeinfo
);
292 if(SUCCEEDED(hres
)) {
293 hres
= ITypeInfo_GetIDsOfNames(typeinfo
, rgszNames
, cNames
, rgDispId
);
294 ITypeInfo_Release(typeinfo
);
300 static HRESULT WINAPI
ScriptControl_Invoke(IScriptControl
*iface
, DISPID dispIdMember
,
301 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
302 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
304 ScriptControl
*This
= impl_from_IScriptControl(iface
);
308 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This
, dispIdMember
, debugstr_guid(riid
),
309 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
311 hres
= get_typeinfo(IScriptControl_tid
, &typeinfo
);
312 if(SUCCEEDED(hres
)) {
313 hres
= ITypeInfo_Invoke(typeinfo
, iface
, dispIdMember
, wFlags
,
314 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
315 ITypeInfo_Release(typeinfo
);
321 static HRESULT WINAPI
ScriptControl_get_Language(IScriptControl
*iface
, BSTR
*p
)
323 ScriptControl
*This
= impl_from_IScriptControl(iface
);
324 FIXME("(%p)->(%p)\n", This
, p
);
328 static HRESULT WINAPI
ScriptControl_put_Language(IScriptControl
*iface
, BSTR language
)
330 ScriptControl
*This
= impl_from_IScriptControl(iface
);
331 FIXME("(%p)->(%s)\n", This
, debugstr_w(language
));
335 static HRESULT WINAPI
ScriptControl_get_State(IScriptControl
*iface
, ScriptControlStates
*p
)
337 ScriptControl
*This
= impl_from_IScriptControl(iface
);
338 FIXME("(%p)->(%p)\n", This
, p
);
342 static HRESULT WINAPI
ScriptControl_put_State(IScriptControl
*iface
, ScriptControlStates state
)
344 ScriptControl
*This
= impl_from_IScriptControl(iface
);
345 FIXME("(%p)->(%x)\n", This
, state
);
349 static HRESULT WINAPI
ScriptControl_put_SitehWnd(IScriptControl
*iface
, LONG hwnd
)
351 ScriptControl
*This
= impl_from_IScriptControl(iface
);
352 FIXME("(%p)->(%x)\n", This
, hwnd
);
356 static HRESULT WINAPI
ScriptControl_get_SitehWnd(IScriptControl
*iface
, LONG
*p
)
358 ScriptControl
*This
= impl_from_IScriptControl(iface
);
359 FIXME("(%p)->(%p)\n", This
, p
);
363 static HRESULT WINAPI
ScriptControl_get_Timeout(IScriptControl
*iface
, LONG
*p
)
365 ScriptControl
*This
= impl_from_IScriptControl(iface
);
366 FIXME("(%p)->(%p)\n", This
, p
);
370 static HRESULT WINAPI
ScriptControl_put_Timeout(IScriptControl
*iface
, LONG milliseconds
)
372 ScriptControl
*This
= impl_from_IScriptControl(iface
);
373 FIXME("(%p)->(%d)\n", This
, milliseconds
);
377 static HRESULT WINAPI
ScriptControl_get_AllowUI(IScriptControl
*iface
, VARIANT_BOOL
*p
)
379 ScriptControl
*This
= impl_from_IScriptControl(iface
);
380 FIXME("(%p)->(%p)\n", This
, p
);
384 static HRESULT WINAPI
ScriptControl_put_AllowUI(IScriptControl
*iface
, VARIANT_BOOL allow_ui
)
386 ScriptControl
*This
= impl_from_IScriptControl(iface
);
387 FIXME("(%p)->(%x)\n", This
, allow_ui
);
391 static HRESULT WINAPI
ScriptControl_get_UseSafeSubset(IScriptControl
*iface
, VARIANT_BOOL
*p
)
393 ScriptControl
*This
= impl_from_IScriptControl(iface
);
394 FIXME("(%p)->(%p)\n", This
, p
);
398 static HRESULT WINAPI
ScriptControl_put_UseSafeSubset(IScriptControl
*iface
, VARIANT_BOOL v
)
400 ScriptControl
*This
= impl_from_IScriptControl(iface
);
401 FIXME("(%p)->(%x)\n", This
, v
);
405 static HRESULT WINAPI
ScriptControl_get_Modules(IScriptControl
*iface
, IScriptModuleCollection
**p
)
407 ScriptControl
*This
= impl_from_IScriptControl(iface
);
408 FIXME("(%p)->(%p)\n", This
, p
);
412 static HRESULT WINAPI
ScriptControl_get_Error(IScriptControl
*iface
, IScriptError
**p
)
414 ScriptControl
*This
= impl_from_IScriptControl(iface
);
415 FIXME("(%p)->(%p)\n", This
, p
);
419 static HRESULT WINAPI
ScriptControl_get_CodeObject(IScriptControl
*iface
, IDispatch
**p
)
421 ScriptControl
*This
= impl_from_IScriptControl(iface
);
422 FIXME("(%p)->(%p)\n", This
, p
);
426 static HRESULT WINAPI
ScriptControl_get_Procedures(IScriptControl
*iface
, IScriptProcedureCollection
**p
)
428 ScriptControl
*This
= impl_from_IScriptControl(iface
);
429 FIXME("(%p)->(%p)\n", This
, p
);
433 static HRESULT WINAPI
ScriptControl__AboutBox(IScriptControl
*iface
)
435 ScriptControl
*This
= impl_from_IScriptControl(iface
);
436 FIXME("(%p)\n", This
);
440 static HRESULT WINAPI
ScriptControl_AddObject(IScriptControl
*iface
, BSTR name
, IDispatch
*object
, VARIANT_BOOL add_members
)
442 ScriptControl
*This
= impl_from_IScriptControl(iface
);
443 FIXME("(%p)->(%s %p %x)\n", This
, debugstr_w(name
), object
, add_members
);
447 static HRESULT WINAPI
ScriptControl_Reset(IScriptControl
*iface
)
449 ScriptControl
*This
= impl_from_IScriptControl(iface
);
450 FIXME("(%p)\n", This
);
454 static HRESULT WINAPI
ScriptControl_AddCode(IScriptControl
*iface
, BSTR code
)
456 ScriptControl
*This
= impl_from_IScriptControl(iface
);
457 FIXME("(%p)->(%s)\n", This
, debugstr_w(code
));
461 static HRESULT WINAPI
ScriptControl_Eval(IScriptControl
*iface
, BSTR expression
, VARIANT
*res
)
463 ScriptControl
*This
= impl_from_IScriptControl(iface
);
464 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(expression
), res
);
468 static HRESULT WINAPI
ScriptControl_ExecuteStatement(IScriptControl
*iface
, BSTR statement
)
470 ScriptControl
*This
= impl_from_IScriptControl(iface
);
471 FIXME("(%p)->(%s)\n", This
, debugstr_w(statement
));
475 static HRESULT WINAPI
ScriptControl_Run(IScriptControl
*iface
, BSTR procedure_name
, SAFEARRAY
**parameters
, VARIANT
*res
)
477 ScriptControl
*This
= impl_from_IScriptControl(iface
);
478 FIXME("(%p)->(%s %p %p)\n", This
, debugstr_w(procedure_name
), parameters
, res
);
482 static const IScriptControlVtbl ScriptControlVtbl
= {
483 ScriptControl_QueryInterface
,
484 ScriptControl_AddRef
,
485 ScriptControl_Release
,
486 ScriptControl_GetTypeInfoCount
,
487 ScriptControl_GetTypeInfo
,
488 ScriptControl_GetIDsOfNames
,
489 ScriptControl_Invoke
,
490 ScriptControl_get_Language
,
491 ScriptControl_put_Language
,
492 ScriptControl_get_State
,
493 ScriptControl_put_State
,
494 ScriptControl_put_SitehWnd
,
495 ScriptControl_get_SitehWnd
,
496 ScriptControl_get_Timeout
,
497 ScriptControl_put_Timeout
,
498 ScriptControl_get_AllowUI
,
499 ScriptControl_put_AllowUI
,
500 ScriptControl_get_UseSafeSubset
,
501 ScriptControl_put_UseSafeSubset
,
502 ScriptControl_get_Modules
,
503 ScriptControl_get_Error
,
504 ScriptControl_get_CodeObject
,
505 ScriptControl_get_Procedures
,
506 ScriptControl__AboutBox
,
507 ScriptControl_AddObject
,
509 ScriptControl_AddCode
,
511 ScriptControl_ExecuteStatement
,
515 static HRESULT WINAPI
OleObject_QueryInterface(IOleObject
*iface
, REFIID riid
, void **obj
)
517 ScriptControl
*This
= impl_from_IOleObject(iface
);
518 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
521 static ULONG WINAPI
OleObject_AddRef(IOleObject
*iface
)
523 ScriptControl
*This
= impl_from_IOleObject(iface
);
524 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
527 static ULONG WINAPI
OleObject_Release(IOleObject
*iface
)
529 ScriptControl
*This
= impl_from_IOleObject(iface
);
530 return IScriptControl_Release(&This
->IScriptControl_iface
);
533 static HRESULT WINAPI
OleObject_SetClientSite(IOleObject
*iface
, IOleClientSite
*site
)
535 ScriptControl
*This
= impl_from_IOleObject(iface
);
537 TRACE("(%p)->(%p)\n", This
, site
);
540 IOleClientSite_Release(This
->site
);
542 if ((This
->site
= site
))
543 IOleClientSite_AddRef(site
);
548 static HRESULT WINAPI
OleObject_GetClientSite(IOleObject
*iface
, IOleClientSite
**site
)
550 ScriptControl
*This
= impl_from_IOleObject(iface
);
552 TRACE("(%p)->(%p)\n", This
, site
);
557 if ((*site
= This
->site
))
558 IOleClientSite_AddRef(*site
);
563 static HRESULT WINAPI
OleObject_SetHostNames(IOleObject
*iface
, LPCOLESTR containerapp
, LPCOLESTR containerobj
)
565 ScriptControl
*This
= impl_from_IOleObject(iface
);
567 FIXME("(%p)->(%s %s)\n", This
, debugstr_w(containerapp
), debugstr_w(containerobj
));
572 static HRESULT WINAPI
OleObject_Close(IOleObject
*iface
, DWORD save
)
574 ScriptControl
*This
= impl_from_IOleObject(iface
);
576 FIXME("(%p)->(%d)\n", This
, save
);
581 static HRESULT WINAPI
OleObject_SetMoniker(IOleObject
*iface
, DWORD which
, IMoniker
*moniker
)
583 ScriptControl
*This
= impl_from_IOleObject(iface
);
585 FIXME("(%p)->(%d %p)\n", This
, which
, moniker
);
590 static HRESULT WINAPI
OleObject_GetMoniker(IOleObject
*iface
, DWORD assign
, DWORD which
, IMoniker
**moniker
)
592 ScriptControl
*This
= impl_from_IOleObject(iface
);
594 FIXME("(%p)->(%d %d %p)\n", This
, assign
, which
, moniker
);
599 static HRESULT WINAPI
OleObject_InitFromData(IOleObject
*iface
, IDataObject
*dataobj
, BOOL creation
,
602 ScriptControl
*This
= impl_from_IOleObject(iface
);
604 FIXME("(%p)->(%p %d %d)\n", This
, dataobj
, creation
, reserved
);
609 static HRESULT WINAPI
OleObject_GetClipboardData(IOleObject
*iface
, DWORD reserved
, IDataObject
**dataobj
)
611 ScriptControl
*This
= impl_from_IOleObject(iface
);
613 FIXME("(%p)->(%d %p)\n", This
, reserved
, dataobj
);
618 static HRESULT WINAPI
OleObject_DoVerb(IOleObject
*iface
, LONG verb
, LPMSG msg
, IOleClientSite
*active_site
,
619 LONG index
, HWND hwndParent
, LPCRECT rect
)
621 ScriptControl
*This
= impl_from_IOleObject(iface
);
623 FIXME("(%p)->(%d %p %p %d %p %p)\n", This
, verb
, msg
, active_site
, index
, hwndParent
, rect
);
628 static HRESULT WINAPI
OleObject_EnumVerbs(IOleObject
*iface
, IEnumOLEVERB
**enumoleverb
)
630 ScriptControl
*This
= impl_from_IOleObject(iface
);
632 FIXME("(%p)->(%p)\n", This
, enumoleverb
);
637 static HRESULT WINAPI
OleObject_Update(IOleObject
*iface
)
639 ScriptControl
*This
= impl_from_IOleObject(iface
);
641 FIXME("(%p)\n", This
);
646 static HRESULT WINAPI
OleObject_IsUpToDate(IOleObject
*iface
)
648 ScriptControl
*This
= impl_from_IOleObject(iface
);
650 FIXME("(%p)\n", This
);
655 static HRESULT WINAPI
OleObject_GetUserClassID(IOleObject
*iface
, CLSID
*clsid
)
657 ScriptControl
*This
= impl_from_IOleObject(iface
);
659 FIXME("(%p)->(%p)\n", This
, clsid
);
664 static HRESULT WINAPI
OleObject_GetUserType(IOleObject
*iface
, DWORD form_of_type
, LPOLESTR
*usertype
)
666 ScriptControl
*This
= impl_from_IOleObject(iface
);
668 FIXME("(%p)->(%d %p)\n", This
, form_of_type
, usertype
);
673 static HRESULT WINAPI
OleObject_SetExtent(IOleObject
*iface
, DWORD aspect
, SIZEL
*size
)
675 ScriptControl
*This
= impl_from_IOleObject(iface
);
677 FIXME("(%p)->(%d %p)\n", This
, aspect
, size
);
682 static HRESULT WINAPI
OleObject_GetExtent(IOleObject
*iface
, DWORD aspect
, SIZEL
*size
)
684 ScriptControl
*This
= impl_from_IOleObject(iface
);
686 TRACE("(%p)->(%d %p)\n", This
, aspect
, size
);
688 if (aspect
!= DVASPECT_CONTENT
)
689 return DV_E_DVASPECT
;
691 *size
= This
->extent
;
695 static HRESULT WINAPI
OleObject_Advise(IOleObject
*iface
, IAdviseSink
*sink
, DWORD
*connection
)
697 ScriptControl
*This
= impl_from_IOleObject(iface
);
699 FIXME("(%p)->(%p %p)\n", This
, sink
, connection
);
704 static HRESULT WINAPI
OleObject_Unadvise(IOleObject
*iface
, DWORD connection
)
706 ScriptControl
*This
= impl_from_IOleObject(iface
);
708 FIXME("(%p)->(%d)\n", This
, connection
);
713 static HRESULT WINAPI
OleObject_EnumAdvise(IOleObject
*iface
, IEnumSTATDATA
**enumadvise
)
715 ScriptControl
*This
= impl_from_IOleObject(iface
);
717 FIXME("(%p)->(%p)\n", This
, enumadvise
);
722 static HRESULT WINAPI
OleObject_GetMiscStatus(IOleObject
*iface
, DWORD aspect
, DWORD
*status
)
724 ScriptControl
*This
= impl_from_IOleObject(iface
);
726 TRACE("(%p)->(%d %p)\n", This
, aspect
, status
);
728 return OleRegGetMiscStatus(&CLSID_ScriptControl
, aspect
, status
);
731 static HRESULT WINAPI
OleObject_SetColorScheme(IOleObject
*iface
, LOGPALETTE
*logpal
)
733 ScriptControl
*This
= impl_from_IOleObject(iface
);
735 FIXME("(%p)->(%p)\n", This
, logpal
);
740 static const IOleObjectVtbl OleObjectVtbl
= {
741 OleObject_QueryInterface
,
744 OleObject_SetClientSite
,
745 OleObject_GetClientSite
,
746 OleObject_SetHostNames
,
748 OleObject_SetMoniker
,
749 OleObject_GetMoniker
,
750 OleObject_InitFromData
,
751 OleObject_GetClipboardData
,
755 OleObject_IsUpToDate
,
756 OleObject_GetUserClassID
,
757 OleObject_GetUserType
,
762 OleObject_EnumAdvise
,
763 OleObject_GetMiscStatus
,
764 OleObject_SetColorScheme
767 static HRESULT WINAPI
PersistStreamInit_QueryInterface(IPersistStreamInit
*iface
, REFIID riid
, void **obj
)
769 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
770 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
773 static ULONG WINAPI
PersistStreamInit_AddRef(IPersistStreamInit
*iface
)
775 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
776 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
779 static ULONG WINAPI
PersistStreamInit_Release(IPersistStreamInit
*iface
)
781 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
782 return IScriptControl_Release(&This
->IScriptControl_iface
);
785 static HRESULT WINAPI
PersistStreamInit_GetClassID(IPersistStreamInit
*iface
, CLSID
*clsid
)
787 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
789 FIXME("(%p)->(%p)\n", This
, clsid
);
794 static HRESULT WINAPI
PersistStreamInit_IsDirty(IPersistStreamInit
*iface
)
796 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
798 FIXME("(%p)\n", This
);
803 static HRESULT WINAPI
PersistStreamInit_Load(IPersistStreamInit
*iface
, IStream
*stream
)
805 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
807 FIXME("(%p)->(%p)\n", This
, stream
);
812 static HRESULT WINAPI
PersistStreamInit_Save(IPersistStreamInit
*iface
, IStream
*stream
, BOOL clear_dirty
)
814 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
816 FIXME("(%p)->(%p %d)\n", This
, stream
, clear_dirty
);
821 static HRESULT WINAPI
PersistStreamInit_GetSizeMax(IPersistStreamInit
*iface
, ULARGE_INTEGER
*size
)
823 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
825 FIXME("(%p)->(%p)\n", This
, size
);
830 static HRESULT WINAPI
PersistStreamInit_InitNew(IPersistStreamInit
*iface
)
832 ScriptControl
*This
= impl_from_IPersistStreamInit(iface
);
834 FIXME("(%p)\n", This
);
839 static const IPersistStreamInitVtbl PersistStreamInitVtbl
= {
840 PersistStreamInit_QueryInterface
,
841 PersistStreamInit_AddRef
,
842 PersistStreamInit_Release
,
843 PersistStreamInit_GetClassID
,
844 PersistStreamInit_IsDirty
,
845 PersistStreamInit_Load
,
846 PersistStreamInit_Save
,
847 PersistStreamInit_GetSizeMax
,
848 PersistStreamInit_InitNew
851 static HRESULT WINAPI
OleControl_QueryInterface(IOleControl
*iface
, REFIID riid
, void **obj
)
853 ScriptControl
*This
= impl_from_IOleControl(iface
);
854 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
857 static ULONG WINAPI
OleControl_AddRef(IOleControl
*iface
)
859 ScriptControl
*This
= impl_from_IOleControl(iface
);
860 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
863 static ULONG WINAPI
OleControl_Release(IOleControl
*iface
)
865 ScriptControl
*This
= impl_from_IOleControl(iface
);
866 return IScriptControl_Release(&This
->IScriptControl_iface
);
869 static HRESULT WINAPI
OleControl_GetControlInfo(IOleControl
*iface
, CONTROLINFO
*info
)
871 ScriptControl
*This
= impl_from_IOleControl(iface
);
873 TRACE("(%p)->(%p)\n", This
, info
);
884 static HRESULT WINAPI
OleControl_OnMnemonic(IOleControl
*iface
, MSG
*msg
)
886 ScriptControl
*This
= impl_from_IOleControl(iface
);
888 FIXME("(%p)->(%p)\n", This
, msg
);
893 static HRESULT WINAPI
OleControl_OnAmbientPropertyChange(IOleControl
*iface
, DISPID dispid
)
895 ScriptControl
*This
= impl_from_IOleControl(iface
);
897 FIXME("(%p)->(%#x)\n", This
, dispid
);
902 static HRESULT WINAPI
OleControl_FreezeEvents(IOleControl
*iface
, BOOL freeze
)
904 ScriptControl
*This
= impl_from_IOleControl(iface
);
906 FIXME("(%p)->(%d)\n", This
, freeze
);
911 static const IOleControlVtbl OleControlVtbl
= {
912 OleControl_QueryInterface
,
915 OleControl_GetControlInfo
,
916 OleControl_OnMnemonic
,
917 OleControl_OnAmbientPropertyChange
,
918 OleControl_FreezeEvents
921 static HRESULT WINAPI
QuickActivate_QueryInterface(IQuickActivate
*iface
, REFIID riid
, void **obj
)
923 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
924 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
927 static ULONG WINAPI
QuickActivate_AddRef(IQuickActivate
*iface
)
929 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
930 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
933 static ULONG WINAPI
QuickActivate_Release(IQuickActivate
*iface
)
935 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
936 return IScriptControl_Release(&This
->IScriptControl_iface
);
939 static HRESULT WINAPI
QuickActivate_QuickActivate(IQuickActivate
*iface
, QACONTAINER
*container
, QACONTROL
*control
)
941 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
943 FIXME("(%p)->(%p %p)\n", This
, container
, control
);
948 static HRESULT WINAPI
QuickActivate_SetContentExtent(IQuickActivate
*iface
, SIZEL
*size
)
950 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
952 FIXME("(%p)->(%p)\n", This
, size
);
957 static HRESULT WINAPI
QuickActivate_GetContentExtent(IQuickActivate
*iface
, SIZEL
*size
)
959 ScriptControl
*This
= impl_from_IQuickActivate(iface
);
961 FIXME("(%p)->(%p)\n", This
, size
);
966 static const IQuickActivateVtbl QuickActivateVtbl
= {
967 QuickActivate_QueryInterface
,
968 QuickActivate_AddRef
,
969 QuickActivate_Release
,
970 QuickActivate_QuickActivate
,
971 QuickActivate_SetContentExtent
,
972 QuickActivate_GetContentExtent
975 static HRESULT WINAPI
ViewObject_QueryInterface(IViewObjectEx
*iface
, REFIID riid
, void **obj
)
977 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
978 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
981 static ULONG WINAPI
ViewObject_AddRef(IViewObjectEx
*iface
)
983 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
984 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
987 static ULONG WINAPI
ViewObject_Release(IViewObjectEx
*iface
)
989 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
990 return IScriptControl_Release(&This
->IScriptControl_iface
);
993 static HRESULT WINAPI
ViewObject_Draw(IViewObjectEx
*iface
, DWORD drawaspect
, LONG index
, void *aspect
,
994 DVTARGETDEVICE
*device
, HDC target_dev
, HDC hdc_draw
, const RECTL
*bounds
, const RECTL
*win_bounds
,
995 BOOL (STDMETHODCALLTYPE
*fn_continue
)(ULONG_PTR cont
), ULONG_PTR cont
)
997 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
999 FIXME("(%p)->(%d %d %p %p %p %p %p %p %p %lu)\n", This
, drawaspect
, index
, aspect
, device
, target_dev
,
1000 hdc_draw
, bounds
, win_bounds
, fn_continue
, cont
);
1005 static HRESULT WINAPI
ViewObject_GetColorSet(IViewObjectEx
*iface
, DWORD drawaspect
, LONG index
, void *aspect
,
1006 DVTARGETDEVICE
*device
, HDC hic_target
, LOGPALETTE
**colorset
)
1008 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1010 FIXME("(%p)->(%d %d %p %p %p %p)\n", This
, drawaspect
, index
, aspect
, device
, hic_target
,
1016 static HRESULT WINAPI
ViewObject_Freeze(IViewObjectEx
*iface
, DWORD drawaspect
, LONG index
, void *aspect
,
1019 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1021 FIXME("(%p)->(%d %d %p %p)\n", This
, drawaspect
, index
, aspect
, freeze
);
1026 static HRESULT WINAPI
ViewObject_Unfreeze(IViewObjectEx
*iface
, DWORD freeze
)
1028 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1030 FIXME("(%p)->(%d)\n", This
, freeze
);
1035 static HRESULT WINAPI
ViewObject_SetAdvise(IViewObjectEx
*iface
, DWORD aspects
, DWORD advf
, IAdviseSink
*sink
)
1037 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1039 FIXME("(%p)->(%d %d %p)\n", This
, aspects
, advf
, sink
);
1044 static HRESULT WINAPI
ViewObject_GetAdvise(IViewObjectEx
*iface
, DWORD
*aspects
, DWORD
*advf
, IAdviseSink
**sink
)
1046 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1048 FIXME("(%p)->(%p %p %p)\n", This
, aspects
, advf
, sink
);
1053 static HRESULT WINAPI
ViewObject_GetExtent(IViewObjectEx
*iface
, DWORD draw_aspect
, LONG index
,
1054 DVTARGETDEVICE
*device
, SIZEL
*size
)
1056 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1058 FIXME("(%p)->(%d %d %p %p)\n", This
, draw_aspect
, index
, device
, size
);
1063 static HRESULT WINAPI
ViewObject_GetRect(IViewObjectEx
*iface
, DWORD aspect
, RECTL
*rect
)
1065 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1067 FIXME("(%p)->(%d %p)\n", This
, aspect
, rect
);
1072 static HRESULT WINAPI
ViewObject_GetViewStatus(IViewObjectEx
*iface
, DWORD
*status
)
1074 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1076 TRACE("(%p)->(%p)\n", This
, status
);
1078 *status
= VIEWSTATUS_OPAQUE
;
1082 static HRESULT WINAPI
ViewObject_QueryHitPoint(IViewObjectEx
*iface
, DWORD aspect
, const RECT
*bounds
,
1083 POINT pt
, LONG close_hint
, DWORD
*hit_result
)
1085 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1087 FIXME("(%p)->(%d %s %s %d %p)\n", This
, aspect
, wine_dbgstr_rect(bounds
), wine_dbgstr_point(&pt
), close_hint
, hit_result
);
1092 static HRESULT WINAPI
ViewObject_QueryHitRect(IViewObjectEx
*iface
, DWORD aspect
, const RECT
*bounds
,
1093 const RECT
*loc
, LONG close_hint
, DWORD
*hit_result
)
1095 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1097 FIXME("(%p)->(%d %s %s %d %p)\n", This
, aspect
, wine_dbgstr_rect(bounds
), wine_dbgstr_rect(loc
), close_hint
, hit_result
);
1102 static HRESULT WINAPI
ViewObject_GetNaturalExtent(IViewObjectEx
*iface
, DWORD aspect
, LONG index
,
1103 DVTARGETDEVICE
*device
, HDC target_hdc
, DVEXTENTINFO
*extent_info
, SIZEL
*size
)
1105 ScriptControl
*This
= impl_from_IViewObjectEx(iface
);
1107 FIXME("(%p)->(%d %d %p %p %p %p)\n", This
, aspect
, index
, device
, target_hdc
, extent_info
, size
);
1112 static const IViewObjectExVtbl ViewObjectExVtbl
= {
1113 ViewObject_QueryInterface
,
1117 ViewObject_GetColorSet
,
1119 ViewObject_Unfreeze
,
1120 ViewObject_SetAdvise
,
1121 ViewObject_GetAdvise
,
1122 ViewObject_GetExtent
,
1124 ViewObject_GetViewStatus
,
1125 ViewObject_QueryHitPoint
,
1126 ViewObject_QueryHitRect
,
1127 ViewObject_GetNaturalExtent
1130 static HRESULT WINAPI
PointerInactive_QueryInterface(IPointerInactive
*iface
, REFIID riid
, void **obj
)
1132 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1133 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1136 static ULONG WINAPI
PointerInactive_AddRef(IPointerInactive
*iface
)
1138 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1139 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1142 static ULONG WINAPI
PointerInactive_Release(IPointerInactive
*iface
)
1144 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1145 return IScriptControl_Release(&This
->IScriptControl_iface
);
1148 static HRESULT WINAPI
PointerInactive_GetActivationPolicy(IPointerInactive
*iface
, DWORD
*policy
)
1150 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1152 TRACE("(%p)->(%p)\n", This
, policy
);
1161 static HRESULT WINAPI
PointerInactive_OnInactiveMouseMove(IPointerInactive
*iface
, const RECT
*bounds
,
1162 LONG x
, LONG y
, DWORD key_state
)
1164 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1166 FIXME("(%p)->(%s %d %d %#x)\n", This
, wine_dbgstr_rect(bounds
), x
, y
, key_state
);
1171 static HRESULT WINAPI
PointerInactive_OnInactiveSetCursor(IPointerInactive
*iface
, const RECT
*bounds
,
1172 LONG x
, LONG y
, DWORD msg
, BOOL set_always
)
1174 ScriptControl
*This
= impl_from_IPointerInactive(iface
);
1176 FIXME("(%p)->(%s %d %d %#x %d)\n", This
, wine_dbgstr_rect(bounds
), x
, y
, msg
, set_always
);
1181 static const IPointerInactiveVtbl PointerInactiveVtbl
= {
1182 PointerInactive_QueryInterface
,
1183 PointerInactive_AddRef
,
1184 PointerInactive_Release
,
1185 PointerInactive_GetActivationPolicy
,
1186 PointerInactive_OnInactiveMouseMove
,
1187 PointerInactive_OnInactiveSetCursor
1190 static HRESULT WINAPI
ConnectionPointContainer_QueryInterface(IConnectionPointContainer
*iface
, REFIID riid
, void **obj
)
1192 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1193 return IScriptControl_QueryInterface(&This
->IScriptControl_iface
, riid
, obj
);
1196 static ULONG WINAPI
ConnectionPointContainer_AddRef(IConnectionPointContainer
*iface
)
1198 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1199 return IScriptControl_AddRef(&This
->IScriptControl_iface
);
1202 static ULONG WINAPI
ConnectionPointContainer_Release(IConnectionPointContainer
*iface
)
1204 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1205 return IScriptControl_Release(&This
->IScriptControl_iface
);
1208 static HRESULT WINAPI
ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer
*iface
, IEnumConnectionPoints
**enum_points
)
1210 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1212 FIXME("(%p)->(%p)\n", This
, enum_points
);
1217 static HRESULT WINAPI
ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer
*iface
, REFIID riid
, IConnectionPoint
**cp
)
1219 ScriptControl
*This
= impl_from_IConnectionPointContainer(iface
);
1220 ConnectionPoint
*iter
;
1222 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), cp
);
1226 for (iter
= This
->cp_list
; iter
; iter
= iter
->next
) {
1227 if (IsEqualIID(iter
->riid
, riid
))
1228 *cp
= &iter
->IConnectionPoint_iface
;
1232 IConnectionPoint_AddRef(*cp
);
1236 FIXME("unsupported connection point %s\n", debugstr_guid(riid
));
1237 return CONNECT_E_NOCONNECTION
;
1240 static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl
= {
1241 ConnectionPointContainer_QueryInterface
,
1242 ConnectionPointContainer_AddRef
,
1243 ConnectionPointContainer_Release
,
1244 ConnectionPointContainer_EnumConnectionPoints
,
1245 ConnectionPointContainer_FindConnectionPoint
1248 static HRESULT WINAPI
ConnectionPoint_QueryInterface(IConnectionPoint
*iface
,
1249 REFIID riid
, void **ppv
)
1251 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1253 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1254 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
1255 *ppv
= &This
->IConnectionPoint_iface
;
1256 }else if(IsEqualGUID(&IID_IConnectionPoint
, riid
)) {
1257 TRACE("(%p)->(IID_IDispatch %p)\n", This
, ppv
);
1258 *ppv
= &This
->IConnectionPoint_iface
;
1260 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
1262 return E_NOINTERFACE
;
1265 IUnknown_AddRef((IUnknown
*)*ppv
);
1269 static ULONG WINAPI
ConnectionPoint_AddRef(IConnectionPoint
*iface
)
1271 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1272 return IConnectionPointContainer_AddRef(&This
->control
->IConnectionPointContainer_iface
);
1275 static ULONG WINAPI
ConnectionPoint_Release(IConnectionPoint
*iface
)
1277 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1278 return IConnectionPointContainer_Release(&This
->control
->IConnectionPointContainer_iface
);
1281 static HRESULT WINAPI
ConnectionPoint_GetConnectionInterface(IConnectionPoint
*iface
, IID
*iid
)
1283 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1285 TRACE("(%p)->(%p)\n", This
, iid
);
1291 static HRESULT WINAPI
ConnectionPoint_GetConnectionPointContainer(IConnectionPoint
*iface
,
1292 IConnectionPointContainer
**container
)
1294 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1296 TRACE("(%p)->(%p)\n", This
, container
);
1301 *container
= &This
->control
->IConnectionPointContainer_iface
;
1302 IConnectionPointContainer_AddRef(*container
);
1307 static HRESULT WINAPI
ConnectionPoint_Advise(IConnectionPoint
*iface
, IUnknown
*unk_sink
,
1310 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1312 FIXME("(%p)->(%p %p)\n", This
, unk_sink
, cookie
);
1317 static HRESULT WINAPI
ConnectionPoint_Unadvise(IConnectionPoint
*iface
, DWORD cookie
)
1319 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1321 FIXME("(%p)->(%d)\n", This
, cookie
);
1326 static HRESULT WINAPI
ConnectionPoint_EnumConnections(IConnectionPoint
*iface
,
1327 IEnumConnections
**ppEnum
)
1329 ConnectionPoint
*This
= impl_from_IConnectionPoint(iface
);
1331 FIXME("(%p)->(%p): stub\n", This
, ppEnum
);
1336 static const IConnectionPointVtbl ConnectionPointVtbl
=
1338 ConnectionPoint_QueryInterface
,
1339 ConnectionPoint_AddRef
,
1340 ConnectionPoint_Release
,
1341 ConnectionPoint_GetConnectionInterface
,
1342 ConnectionPoint_GetConnectionPointContainer
,
1343 ConnectionPoint_Advise
,
1344 ConnectionPoint_Unadvise
,
1345 ConnectionPoint_EnumConnections
1348 static void ConnectionPoint_Init(ConnectionPoint
*cp
, ScriptControl
*sc
, REFIID riid
)
1350 cp
->IConnectionPoint_iface
.lpVtbl
= &ConnectionPointVtbl
;
1354 cp
->next
= sc
->cp_list
;
1358 static HRESULT WINAPI
ScriptControl_CreateInstance(IClassFactory
*iface
, IUnknown
*outer
, REFIID riid
, void **ppv
)
1360 ScriptControl
*script_control
;
1365 TRACE("(%p %s %p)\n", outer
, debugstr_guid(riid
), ppv
);
1367 script_control
= heap_alloc(sizeof(*script_control
));
1369 return E_OUTOFMEMORY
;
1371 script_control
->IScriptControl_iface
.lpVtbl
= &ScriptControlVtbl
;
1372 script_control
->IPersistStreamInit_iface
.lpVtbl
= &PersistStreamInitVtbl
;
1373 script_control
->IOleObject_iface
.lpVtbl
= &OleObjectVtbl
;
1374 script_control
->IOleControl_iface
.lpVtbl
= &OleControlVtbl
;
1375 script_control
->IQuickActivate_iface
.lpVtbl
= &QuickActivateVtbl
;
1376 script_control
->IViewObjectEx_iface
.lpVtbl
= &ViewObjectExVtbl
;
1377 script_control
->IPointerInactive_iface
.lpVtbl
= &PointerInactiveVtbl
;
1378 script_control
->IConnectionPointContainer_iface
.lpVtbl
= &ConnectionPointContainerVtbl
;
1379 script_control
->ref
= 1;
1380 script_control
->site
= NULL
;
1381 script_control
->cp_list
= NULL
;
1383 ConnectionPoint_Init(&script_control
->cp_scsource
, script_control
, &DIID_DScriptControlSource
);
1384 ConnectionPoint_Init(&script_control
->cp_propnotif
, script_control
, &IID_IPropertyNotifySink
);
1387 dpi_x
= GetDeviceCaps(hdc
, LOGPIXELSX
);
1388 dpi_y
= GetDeviceCaps(hdc
, LOGPIXELSY
);
1391 script_control
->extent
.cx
= MulDiv(38, 2540, dpi_x
);
1392 script_control
->extent
.cy
= MulDiv(38, 2540, dpi_y
);
1394 hres
= IScriptControl_QueryInterface(&script_control
->IScriptControl_iface
, riid
, ppv
);
1395 IScriptControl_Release(&script_control
->IScriptControl_iface
);
1399 /******************************************************************
1400 * DllMain (msscript.ocx.@)
1402 BOOL WINAPI
DllMain(HINSTANCE instance
, DWORD reason
, void *reserved
)
1404 TRACE("(%p %d %p)\n", instance
, reason
, reserved
);
1407 case DLL_WINE_PREATTACH
:
1408 return FALSE
; /* prefer native version */
1409 case DLL_PROCESS_ATTACH
:
1410 msscript_instance
= instance
;
1411 DisableThreadLibraryCalls(instance
);
1413 case DLL_PROCESS_DETACH
:
1422 static HRESULT WINAPI
ClassFactory_QueryInterface(IClassFactory
*iface
, REFIID riid
, void **ppv
)
1426 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1427 TRACE("(%p)->(IID_IUnknown %p)\n", iface
, ppv
);
1429 }else if(IsEqualGUID(&IID_IClassFactory
, riid
)) {
1430 TRACE("(%p)->(IID_IClassFactory %p)\n", iface
, ppv
);
1435 IUnknown_AddRef((IUnknown
*)*ppv
);
1439 WARN("(%p)->(%s %p)\n", iface
, debugstr_guid(riid
), ppv
);
1440 return E_NOINTERFACE
;
1443 static ULONG WINAPI
ClassFactory_AddRef(IClassFactory
*iface
)
1445 TRACE("(%p)\n", iface
);
1449 static ULONG WINAPI
ClassFactory_Release(IClassFactory
*iface
)
1451 TRACE("(%p)\n", iface
);
1455 static HRESULT WINAPI
ClassFactory_LockServer(IClassFactory
*iface
, BOOL fLock
)
1457 TRACE("(%p)->(%x)\n", iface
, fLock
);
1461 static const IClassFactoryVtbl ScriptControlFactoryVtbl
= {
1462 ClassFactory_QueryInterface
,
1463 ClassFactory_AddRef
,
1464 ClassFactory_Release
,
1465 ScriptControl_CreateInstance
,
1466 ClassFactory_LockServer
1469 static IClassFactory ScriptControlFactory
= { &ScriptControlFactoryVtbl
};
1471 /***********************************************************************
1472 * DllGetClassObject (msscript.ocx.@)
1474 HRESULT WINAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
1476 if(IsEqualGUID(&CLSID_ScriptControl
, rclsid
)) {
1477 TRACE("(CLSID_ScriptControl %s %p)\n", debugstr_guid(riid
), ppv
);
1478 return IClassFactory_QueryInterface(&ScriptControlFactory
, riid
, ppv
);
1481 FIXME("%s %s %p\n", debugstr_guid(rclsid
), debugstr_guid(riid
), ppv
);
1482 return CLASS_E_CLASSNOTAVAILABLE
;
1485 /***********************************************************************
1486 * DllCanUnloadNow (msscript.ocx.@)
1488 HRESULT WINAPI
DllCanUnloadNow(void)
1494 /***********************************************************************
1495 * DllRegisterServer (msscript.ocx.@)
1497 HRESULT WINAPI
DllRegisterServer(void)
1500 return __wine_register_resources(msscript_instance
);
1503 /***********************************************************************
1504 * DllUnregisterServer (msscript.ocx.@)
1506 HRESULT WINAPI
DllUnregisterServer(void)
1509 return __wine_unregister_resources(msscript_instance
);