vbscript: Added stub VBScript object implementation.
[wine] / dlls / vbscript / vbscript.c
1 /*
2  * Copyright 2011 Jacek Caban for CodeWeavers
3  *
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.
8  *
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.
13  *
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
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22
23 #define COBJMACROS
24
25 #include "windef.h"
26 #include "winbase.h"
27 #include "ole2.h"
28
29 #include "vbscript.h"
30
31 #include "wine/debug.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(vbscript);
34
35 #ifdef _WIN64
36
37 #define CTXARG_T DWORDLONG
38 #define IActiveScriptParseVtbl IActiveScriptParse64Vtbl
39
40 #else
41
42 #define CTXARG_T DWORD
43 #define IActiveScriptParseVtbl IActiveScriptParse32Vtbl
44
45 #endif
46
47 static inline VBScript *impl_from_IActiveScript(IActiveScript *iface)
48 {
49     return CONTAINING_RECORD(iface, VBScript, IActiveScript_iface);
50 }
51
52 static HRESULT WINAPI VBScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
53 {
54     VBScript *This = impl_from_IActiveScript(iface);
55
56     if(IsEqualGUID(riid, &IID_IUnknown)) {
57         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
58         *ppv = &This->IActiveScript_iface;
59     }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
60         TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
61         *ppv = &This->IActiveScript_iface;
62     }else {
63         FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
64         *ppv = NULL;
65         return E_NOINTERFACE;
66     }
67
68     IUnknown_AddRef((IUnknown*)*ppv);
69     return S_OK;
70 }
71
72 static ULONG WINAPI VBScript_AddRef(IActiveScript *iface)
73 {
74     VBScript *This = impl_from_IActiveScript(iface);
75     LONG ref = InterlockedIncrement(&This->ref);
76
77     TRACE("(%p) ref=%d\n", This, ref);
78
79     return ref;
80 }
81
82 static ULONG WINAPI VBScript_Release(IActiveScript *iface)
83 {
84     VBScript *This = impl_from_IActiveScript(iface);
85     LONG ref = InterlockedDecrement(&This->ref);
86
87     TRACE("(%p) ref=%d\n", iface, ref);
88
89     if(!ref)
90         heap_free(This);
91
92     return ref;
93 }
94
95 static HRESULT WINAPI VBScript_SetScriptSite(IActiveScript *iface, IActiveScriptSite *pass)
96 {
97     VBScript *This = impl_from_IActiveScript(iface);
98     FIXME("(%p)->(%p)\n", This, pass);
99     return S_OK;
100 }
101
102 static HRESULT WINAPI VBScript_GetScriptSite(IActiveScript *iface, REFIID riid,
103                                             void **ppvObject)
104 {
105     VBScript *This = impl_from_IActiveScript(iface);
106     FIXME("(%p)->()\n", This);
107     return E_NOTIMPL;
108 }
109
110 static HRESULT WINAPI VBScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
111 {
112     VBScript *This = impl_from_IActiveScript(iface);
113     FIXME("(%p)->(%d)\n", This, ss);
114     return S_OK;
115 }
116
117 static HRESULT WINAPI VBScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
118 {
119     VBScript *This = impl_from_IActiveScript(iface);
120     FIXME("(%p)->(%p)\n", This, pssState);
121     return E_NOTIMPL;
122 }
123
124 static HRESULT WINAPI VBScript_Close(IActiveScript *iface)
125 {
126     VBScript *This = impl_from_IActiveScript(iface);
127     FIXME("(%p)->()\n", This);
128     return E_NOTIMPL;
129 }
130
131 static HRESULT WINAPI VBScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)
132 {
133     VBScript *This = impl_from_IActiveScript(iface);
134     FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
135     return S_OK;
136 }
137
138 static HRESULT WINAPI VBScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
139         DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
140 {
141     VBScript *This = impl_from_IActiveScript(iface);
142     FIXME("(%p)->()\n", This);
143     return E_NOTIMPL;
144 }
145
146 static HRESULT WINAPI VBScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName, IDispatch **ppdisp)
147 {
148     VBScript *This = impl_from_IActiveScript(iface);
149     FIXME("(%p)->(%p)\n", This, ppdisp);
150     return E_NOTIMPL;
151 }
152
153 static HRESULT WINAPI VBScript_GetCurrentScriptThreadID(IActiveScript *iface,
154                                                        SCRIPTTHREADID *pstridThread)
155 {
156     VBScript *This = impl_from_IActiveScript(iface);
157     FIXME("(%p)->()\n", This);
158     return E_NOTIMPL;
159 }
160
161 static HRESULT WINAPI VBScript_GetScriptThreadID(IActiveScript *iface,
162                                                 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
163 {
164     VBScript *This = impl_from_IActiveScript(iface);
165     FIXME("(%p)->()\n", This);
166     return E_NOTIMPL;
167 }
168
169 static HRESULT WINAPI VBScript_GetScriptThreadState(IActiveScript *iface,
170         SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
171 {
172     VBScript *This = impl_from_IActiveScript(iface);
173     FIXME("(%p)->()\n", This);
174     return E_NOTIMPL;
175 }
176
177 static HRESULT WINAPI VBScript_InterruptScriptThread(IActiveScript *iface,
178         SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
179 {
180     VBScript *This = impl_from_IActiveScript(iface);
181     FIXME("(%p)->()\n", This);
182     return E_NOTIMPL;
183 }
184
185 static HRESULT WINAPI VBScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
186 {
187     VBScript *This = impl_from_IActiveScript(iface);
188     FIXME("(%p)->()\n", This);
189     return E_NOTIMPL;
190 }
191
192 static const IActiveScriptVtbl VBScriptVtbl = {
193     VBScript_QueryInterface,
194     VBScript_AddRef,
195     VBScript_Release,
196     VBScript_SetScriptSite,
197     VBScript_GetScriptSite,
198     VBScript_SetScriptState,
199     VBScript_GetScriptState,
200     VBScript_Close,
201     VBScript_AddNamedItem,
202     VBScript_AddTypeLib,
203     VBScript_GetScriptDispatch,
204     VBScript_GetCurrentScriptThreadID,
205     VBScript_GetScriptThreadID,
206     VBScript_GetScriptThreadState,
207     VBScript_InterruptScriptThread,
208     VBScript_Clone
209 };
210
211 HRESULT WINAPI VBScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv)
212 {
213     VBScript *ret;
214     HRESULT hres;
215
216     TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
217
218     ret = heap_alloc_zero(sizeof(*ret));
219     if(!ret)
220         return E_OUTOFMEMORY;
221
222     ret->IActiveScript_iface.lpVtbl = &VBScriptVtbl;
223
224     ret->ref = 1;
225
226     hres = IActiveScript_QueryInterface(&ret->IActiveScript_iface, riid, ppv);
227     IActiveScript_Release(&ret->IActiveScript_iface);
228     return hres;
229 }