maintainers: D3dxof is a D3D helper library too.
[wine.git] / dlls / msscript.ocx / msscript.c
blobbc3f5c1cae4324288b3377d5de8c50ad3dac36f7
1 /*
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
19 #define COBJMACROS
21 #include "windows.h"
22 #include "initguid.h"
23 #include "ole2.h"
24 #include "olectl.h"
25 #include "rpcproxy.h"
26 #include "msscript.h"
28 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msscript);
32 struct ScriptControl;
33 typedef struct ConnectionPoint ConnectionPoint;
35 struct ConnectionPoint {
36 IConnectionPoint IConnectionPoint_iface;
37 ScriptControl *control;
38 const IID *riid;
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;
51 LONG ref;
52 IOleClientSite *site;
53 SIZEL extent;
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);
73 typedef enum tid_t {
74 IScriptControl_tid,
75 LAST_tid
76 } tid_t;
78 static ITypeLib *typelib;
79 static ITypeInfo *typeinfos[LAST_tid];
81 static REFIID tid_ids[] = {
82 &IID_IScriptControl
85 static HRESULT load_typelib(void)
87 HRESULT hres;
88 ITypeLib *tl;
90 hres = LoadRegTypeLib(&LIBID_MSScriptControl, 1, 0, LOCALE_SYSTEM_DEFAULT, &tl);
91 if(FAILED(hres)) {
92 ERR("LoadRegTypeLib failed: %08x\n", hres);
93 return hres;
96 if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL))
97 ITypeLib_Release(tl);
98 return hres;
101 static HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
103 HRESULT hres;
105 if (!typelib)
106 hres = load_typelib();
107 if (!typelib)
108 return hres;
110 if(!typeinfos[tid]) {
111 ITypeInfo *ti;
113 hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
114 if(FAILED(hres)) {
115 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids[tid]), hres);
116 return hres;
119 if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), ti, NULL))
120 ITypeInfo_Release(ti);
123 *typeinfo = typeinfos[tid];
124 ITypeInfo_AddRef(typeinfos[tid]);
125 return S_OK;
128 static void release_typelib(void)
130 unsigned i;
132 if(!typelib)
133 return;
135 for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++)
136 if(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;
230 }else {
231 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
232 *ppv = NULL;
233 return E_NOINTERFACE;
236 IUnknown_AddRef((IUnknown*)*ppv);
237 return S_OK;
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);
247 return 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);
257 if(!ref) {
258 if (This->site)
259 IOleClientSite_Release(This->site);
260 heap_free(This);
263 return ref;
266 static HRESULT WINAPI ScriptControl_GetTypeInfoCount(IScriptControl *iface, UINT *pctinfo)
268 ScriptControl *This = impl_from_IScriptControl(iface);
269 TRACE("(%p)->(%p)\n", This, pctinfo);
270 *pctinfo = 1;
271 return S_OK;
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);
286 ITypeInfo *typeinfo;
287 HRESULT hres;
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);
297 return hres;
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);
305 ITypeInfo *typeinfo;
306 HRESULT hres;
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);
318 return hres;
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);
325 return E_NOTIMPL;
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));
332 return E_NOTIMPL;
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);
339 return E_NOTIMPL;
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);
346 return E_NOTIMPL;
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);
353 return E_NOTIMPL;
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);
360 return E_NOTIMPL;
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);
367 return E_NOTIMPL;
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);
374 return E_NOTIMPL;
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);
381 return E_NOTIMPL;
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);
388 return E_NOTIMPL;
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);
395 return E_NOTIMPL;
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);
402 return E_NOTIMPL;
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);
409 return E_NOTIMPL;
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);
416 return E_NOTIMPL;
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);
423 return E_NOTIMPL;
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);
430 return E_NOTIMPL;
433 static HRESULT WINAPI ScriptControl__AboutBox(IScriptControl *iface)
435 ScriptControl *This = impl_from_IScriptControl(iface);
436 FIXME("(%p)\n", This);
437 return E_NOTIMPL;
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);
444 return E_NOTIMPL;
447 static HRESULT WINAPI ScriptControl_Reset(IScriptControl *iface)
449 ScriptControl *This = impl_from_IScriptControl(iface);
450 FIXME("(%p)\n", This);
451 return E_NOTIMPL;
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));
458 return E_NOTIMPL;
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);
465 return E_NOTIMPL;
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));
472 return E_NOTIMPL;
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);
479 return E_NOTIMPL;
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,
508 ScriptControl_Reset,
509 ScriptControl_AddCode,
510 ScriptControl_Eval,
511 ScriptControl_ExecuteStatement,
512 ScriptControl_Run
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);
539 if (This->site)
540 IOleClientSite_Release(This->site);
542 if ((This->site = site))
543 IOleClientSite_AddRef(site);
545 return S_OK;
548 static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, IOleClientSite **site)
550 ScriptControl *This = impl_from_IOleObject(iface);
552 TRACE("(%p)->(%p)\n", This, site);
554 if (!site)
555 return E_POINTER;
557 if ((*site = This->site))
558 IOleClientSite_AddRef(*site);
560 return S_OK;
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));
569 return E_NOTIMPL;
572 static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD save)
574 ScriptControl *This = impl_from_IOleObject(iface);
576 FIXME("(%p)->(%d)\n", This, save);
578 return E_NOTIMPL;
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);
587 return E_NOTIMPL;
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);
596 return E_NOTIMPL;
599 static HRESULT WINAPI OleObject_InitFromData(IOleObject *iface, IDataObject *dataobj, BOOL creation,
600 DWORD reserved)
602 ScriptControl *This = impl_from_IOleObject(iface);
604 FIXME("(%p)->(%p %d %d)\n", This, dataobj, creation, reserved);
606 return E_NOTIMPL;
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);
615 return E_NOTIMPL;
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);
625 return E_NOTIMPL;
628 static HRESULT WINAPI OleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **enumoleverb)
630 ScriptControl *This = impl_from_IOleObject(iface);
632 FIXME("(%p)->(%p)\n", This, enumoleverb);
634 return E_NOTIMPL;
637 static HRESULT WINAPI OleObject_Update(IOleObject *iface)
639 ScriptControl *This = impl_from_IOleObject(iface);
641 FIXME("(%p)\n", This);
643 return E_NOTIMPL;
646 static HRESULT WINAPI OleObject_IsUpToDate(IOleObject *iface)
648 ScriptControl *This = impl_from_IOleObject(iface);
650 FIXME("(%p)\n", This);
652 return E_NOTIMPL;
655 static HRESULT WINAPI OleObject_GetUserClassID(IOleObject *iface, CLSID *clsid)
657 ScriptControl *This = impl_from_IOleObject(iface);
659 FIXME("(%p)->(%p)\n", This, clsid);
661 return E_NOTIMPL;
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);
670 return E_NOTIMPL;
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);
679 return E_NOTIMPL;
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;
692 return S_OK;
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);
701 return E_NOTIMPL;
704 static HRESULT WINAPI OleObject_Unadvise(IOleObject *iface, DWORD connection)
706 ScriptControl *This = impl_from_IOleObject(iface);
708 FIXME("(%p)->(%d)\n", This, connection);
710 return E_NOTIMPL;
713 static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **enumadvise)
715 ScriptControl *This = impl_from_IOleObject(iface);
717 FIXME("(%p)->(%p)\n", This, enumadvise);
719 return E_NOTIMPL;
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);
737 return E_NOTIMPL;
740 static const IOleObjectVtbl OleObjectVtbl = {
741 OleObject_QueryInterface,
742 OleObject_AddRef,
743 OleObject_Release,
744 OleObject_SetClientSite,
745 OleObject_GetClientSite,
746 OleObject_SetHostNames,
747 OleObject_Close,
748 OleObject_SetMoniker,
749 OleObject_GetMoniker,
750 OleObject_InitFromData,
751 OleObject_GetClipboardData,
752 OleObject_DoVerb,
753 OleObject_EnumVerbs,
754 OleObject_Update,
755 OleObject_IsUpToDate,
756 OleObject_GetUserClassID,
757 OleObject_GetUserType,
758 OleObject_SetExtent,
759 OleObject_GetExtent,
760 OleObject_Advise,
761 OleObject_Unadvise,
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);
791 return E_NOTIMPL;
794 static HRESULT WINAPI PersistStreamInit_IsDirty(IPersistStreamInit *iface)
796 ScriptControl *This = impl_from_IPersistStreamInit(iface);
798 FIXME("(%p)\n", This);
800 return E_NOTIMPL;
803 static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, IStream *stream)
805 ScriptControl *This = impl_from_IPersistStreamInit(iface);
807 FIXME("(%p)->(%p)\n", This, stream);
809 return E_NOTIMPL;
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);
818 return E_NOTIMPL;
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);
827 return E_NOTIMPL;
830 static HRESULT WINAPI PersistStreamInit_InitNew(IPersistStreamInit *iface)
832 ScriptControl *This = impl_from_IPersistStreamInit(iface);
834 FIXME("(%p)\n", This);
836 return S_OK;
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);
875 if (!info)
876 return E_POINTER;
878 info->hAccel = NULL;
879 info->cAccel = 0;
881 return S_OK;
884 static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, MSG *msg)
886 ScriptControl *This = impl_from_IOleControl(iface);
888 FIXME("(%p)->(%p)\n", This, msg);
890 return E_NOTIMPL;
893 static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispid)
895 ScriptControl *This = impl_from_IOleControl(iface);
897 FIXME("(%p)->(%#x)\n", This, dispid);
899 return E_NOTIMPL;
902 static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL freeze)
904 ScriptControl *This = impl_from_IOleControl(iface);
906 FIXME("(%p)->(%d)\n", This, freeze);
908 return E_NOTIMPL;
911 static const IOleControlVtbl OleControlVtbl = {
912 OleControl_QueryInterface,
913 OleControl_AddRef,
914 OleControl_Release,
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);
945 return E_NOTIMPL;
948 static HRESULT WINAPI QuickActivate_SetContentExtent(IQuickActivate *iface, SIZEL *size)
950 ScriptControl *This = impl_from_IQuickActivate(iface);
952 FIXME("(%p)->(%p)\n", This, size);
954 return E_NOTIMPL;
957 static HRESULT WINAPI QuickActivate_GetContentExtent(IQuickActivate *iface, SIZEL *size)
959 ScriptControl *This = impl_from_IQuickActivate(iface);
961 FIXME("(%p)->(%p)\n", This, size);
963 return E_NOTIMPL;
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);
1002 return E_NOTIMPL;
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,
1011 colorset);
1013 return E_NOTIMPL;
1016 static HRESULT WINAPI ViewObject_Freeze(IViewObjectEx *iface, DWORD drawaspect, LONG index, void *aspect,
1017 DWORD *freeze)
1019 ScriptControl *This = impl_from_IViewObjectEx(iface);
1021 FIXME("(%p)->(%d %d %p %p)\n", This, drawaspect, index, aspect, freeze);
1023 return E_NOTIMPL;
1026 static HRESULT WINAPI ViewObject_Unfreeze(IViewObjectEx *iface, DWORD freeze)
1028 ScriptControl *This = impl_from_IViewObjectEx(iface);
1030 FIXME("(%p)->(%d)\n", This, freeze);
1032 return E_NOTIMPL;
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);
1041 return E_NOTIMPL;
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);
1050 return E_NOTIMPL;
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);
1060 return E_NOTIMPL;
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);
1069 return E_NOTIMPL;
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;
1079 return S_OK;
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);
1089 return E_NOTIMPL;
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);
1099 return E_NOTIMPL;
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);
1109 return E_NOTIMPL;
1112 static const IViewObjectExVtbl ViewObjectExVtbl = {
1113 ViewObject_QueryInterface,
1114 ViewObject_AddRef,
1115 ViewObject_Release,
1116 ViewObject_Draw,
1117 ViewObject_GetColorSet,
1118 ViewObject_Freeze,
1119 ViewObject_Unfreeze,
1120 ViewObject_SetAdvise,
1121 ViewObject_GetAdvise,
1122 ViewObject_GetExtent,
1123 ViewObject_GetRect,
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);
1154 if (!policy)
1155 return E_POINTER;
1157 *policy = 0;
1158 return S_OK;
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);
1168 return E_NOTIMPL;
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);
1178 return E_NOTIMPL;
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);
1214 return E_NOTIMPL;
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);
1224 *cp = NULL;
1226 for (iter = This->cp_list; iter; iter = iter->next) {
1227 if (IsEqualIID(iter->riid, riid))
1228 *cp = &iter->IConnectionPoint_iface;
1231 if (*cp) {
1232 IConnectionPoint_AddRef(*cp);
1233 return S_OK;
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;
1259 }else {
1260 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
1261 *ppv = NULL;
1262 return E_NOINTERFACE;
1265 IUnknown_AddRef((IUnknown*)*ppv);
1266 return S_OK;
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);
1287 *iid = *This->riid;
1288 return S_OK;
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);
1298 if (!container)
1299 return E_POINTER;
1301 *container = &This->control->IConnectionPointContainer_iface;
1302 IConnectionPointContainer_AddRef(*container);
1304 return S_OK;
1307 static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown *unk_sink,
1308 DWORD *cookie)
1310 ConnectionPoint *This = impl_from_IConnectionPoint(iface);
1312 FIXME("(%p)->(%p %p)\n", This, unk_sink, cookie);
1314 return E_NOTIMPL;
1317 static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD cookie)
1319 ConnectionPoint *This = impl_from_IConnectionPoint(iface);
1321 FIXME("(%p)->(%d)\n", This, cookie);
1323 return E_NOTIMPL;
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);
1333 return E_NOTIMPL;
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;
1351 cp->control = sc;
1352 cp->riid = riid;
1354 cp->next = sc->cp_list;
1355 sc->cp_list = cp;
1358 static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
1360 ScriptControl *script_control;
1361 DWORD dpi_x, dpi_y;
1362 HRESULT hres;
1363 HDC hdc;
1365 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
1367 script_control = heap_alloc(sizeof(*script_control));
1368 if(!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);
1386 hdc = GetDC(0);
1387 dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
1388 dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
1389 ReleaseDC(0, hdc);
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);
1396 return hres;
1399 /******************************************************************
1400 * DllMain (msscript.ocx.@)
1402 BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
1404 TRACE("(%p %d %p)\n", instance, reason, reserved);
1406 switch(reason) {
1407 case DLL_WINE_PREATTACH:
1408 return FALSE; /* prefer native version */
1409 case DLL_PROCESS_ATTACH:
1410 msscript_instance = instance;
1411 DisableThreadLibraryCalls(instance);
1412 break;
1413 case DLL_PROCESS_DETACH:
1414 if(!reserved)
1415 release_typelib();
1416 break;
1419 return TRUE;
1422 static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
1424 *ppv = NULL;
1426 if(IsEqualGUID(&IID_IUnknown, riid)) {
1427 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
1428 *ppv = iface;
1429 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
1430 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
1431 *ppv = iface;
1434 if(*ppv) {
1435 IUnknown_AddRef((IUnknown*)*ppv);
1436 return S_OK;
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);
1446 return 2;
1449 static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
1451 TRACE("(%p)\n", iface);
1452 return 1;
1455 static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
1457 TRACE("(%p)->(%x)\n", iface, fLock);
1458 return S_OK;
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)
1490 TRACE("\n");
1491 return S_FALSE;
1494 /***********************************************************************
1495 * DllRegisterServer (msscript.ocx.@)
1497 HRESULT WINAPI DllRegisterServer(void)
1499 TRACE("()\n");
1500 return __wine_register_resources(msscript_instance);
1503 /***********************************************************************
1504 * DllUnregisterServer (msscript.ocx.@)
1506 HRESULT WINAPI DllUnregisterServer(void)
1508 TRACE("()\n");
1509 return __wine_unregister_resources(msscript_instance);