Added server_abort_thread to replace SYSDEPS_AbortThread.
[wine] / dlls / dmscript / dmscript_main.c
1 /* DirectMusicScript Main
2  *
3  * Copyright (C) 2003 Rok Mandeljc
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19
20 #include "dmscript_private.h"
21
22 WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
23
24 typedef struct
25 {
26     /* IUnknown fields */
27     ICOM_VFIELD(IClassFactory);
28     DWORD                       ref;
29 } IClassFactoryImpl;
30
31 /******************************************************************
32  *              DirectMusicScriptAutoImplSegment ClassFactory
33  */
34 static HRESULT WINAPI ScriptAutoImplSegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
35 {
36         ICOM_THIS(IClassFactoryImpl,iface);
37
38         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
39         return E_NOINTERFACE;
40 }
41
42 static ULONG WINAPI ScriptAutoImplSegmentCF_AddRef(LPCLASSFACTORY iface)
43 {
44         ICOM_THIS(IClassFactoryImpl,iface);
45         return ++(This->ref);
46 }
47
48 static ULONG WINAPI ScriptAutoImplSegmentCF_Release(LPCLASSFACTORY iface)
49 {
50         ICOM_THIS(IClassFactoryImpl,iface);
51         /* static class, won't be  freed */
52         return --(This->ref);
53 }
54
55 static HRESULT WINAPI ScriptAutoImplSegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
56 {
57         ICOM_THIS(IClassFactoryImpl,iface);
58
59         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
60         
61         /* nothing here yet */
62         
63         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
64         return E_NOINTERFACE;
65 }
66
67 static HRESULT WINAPI ScriptAutoImplSegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
68 {
69         ICOM_THIS(IClassFactoryImpl,iface);
70         FIXME("(%p)->(%d),stub!\n", This, dolock);
71         return S_OK;
72 }
73
74 static ICOM_VTABLE(IClassFactory) ScriptAutoImplSegmentCF_Vtbl = {
75         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
76         ScriptAutoImplSegmentCF_QueryInterface,
77         ScriptAutoImplSegmentCF_AddRef,
78         ScriptAutoImplSegmentCF_Release,
79         ScriptAutoImplSegmentCF_CreateInstance,
80         ScriptAutoImplSegmentCF_LockServer
81 };
82
83 static IClassFactoryImpl ScriptAutoImplSegment_CF = {&ScriptAutoImplSegmentCF_Vtbl, 1 };
84
85 /******************************************************************
86  *              DirectMusicScriptTrack ClassFactory
87  */
88 static HRESULT WINAPI ScriptTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
89 {
90         ICOM_THIS(IClassFactoryImpl,iface);
91
92         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
93         return E_NOINTERFACE;
94 }
95
96 static ULONG WINAPI ScriptTrackCF_AddRef(LPCLASSFACTORY iface)
97 {
98         ICOM_THIS(IClassFactoryImpl,iface);
99         return ++(This->ref);
100 }
101
102 static ULONG WINAPI ScriptTrackCF_Release(LPCLASSFACTORY iface)
103 {
104         ICOM_THIS(IClassFactoryImpl,iface);
105         /* static class, won't be  freed */
106         return --(This->ref);
107 }
108
109 static HRESULT WINAPI ScriptTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
110 {
111         ICOM_THIS(IClassFactoryImpl,iface);
112
113         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
114         
115         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
116                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
117                 return DMUSIC_CreateDirectMusicScriptTrack (riid, (LPDIRECTMUSICTRACK8*)ppobj, pOuter);
118         }
119         
120         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
121         return E_NOINTERFACE;
122 }
123
124 static HRESULT WINAPI ScriptTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
125 {
126         ICOM_THIS(IClassFactoryImpl,iface);
127         FIXME("(%p)->(%d),stub!\n", This, dolock);
128         return S_OK;
129 }
130
131 static ICOM_VTABLE(IClassFactory) ScriptTrackCF_Vtbl = {
132         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
133         ScriptTrackCF_QueryInterface,
134         ScriptTrackCF_AddRef,
135         ScriptTrackCF_Release,
136         ScriptTrackCF_CreateInstance,
137         ScriptTrackCF_LockServer
138 };
139
140 static IClassFactoryImpl ScriptTrack_CF = {&ScriptTrackCF_Vtbl, 1 };
141
142 /******************************************************************
143  *              DirectMusicAudioVBScript ClassFactory
144  */
145 static HRESULT WINAPI AudioVBScriptCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
146 {
147         ICOM_THIS(IClassFactoryImpl,iface);
148
149         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
150         return E_NOINTERFACE;
151 }
152
153 static ULONG WINAPI AudioVBScriptCF_AddRef(LPCLASSFACTORY iface)
154 {
155         ICOM_THIS(IClassFactoryImpl,iface);
156         return ++(This->ref);
157 }
158
159 static ULONG WINAPI AudioVBScriptCF_Release(LPCLASSFACTORY iface)
160 {
161         ICOM_THIS(IClassFactoryImpl,iface);
162         /* static class, won't be  freed */
163         return --(This->ref);
164 }
165
166 static HRESULT WINAPI AudioVBScriptCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
167 {
168         ICOM_THIS(IClassFactoryImpl,iface);
169
170         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
171         
172         /* nothing here yet */
173         
174         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
175         return E_NOINTERFACE;
176 }
177
178 static HRESULT WINAPI AudioVBScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
179 {
180         ICOM_THIS(IClassFactoryImpl,iface);
181         FIXME("(%p)->(%d),stub!\n", This, dolock);
182         return S_OK;
183 }
184
185 static ICOM_VTABLE(IClassFactory) AudioVBScriptCF_Vtbl = {
186         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
187         AudioVBScriptCF_QueryInterface,
188         AudioVBScriptCF_AddRef,
189         AudioVBScriptCF_Release,
190         AudioVBScriptCF_CreateInstance,
191         AudioVBScriptCF_LockServer
192 };
193
194 static IClassFactoryImpl AudioVBScript_CF = {&AudioVBScriptCF_Vtbl, 1 };
195
196 /******************************************************************
197  *              DirectMusicScript ClassFactory
198  */
199 static HRESULT WINAPI ScriptCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
200 {
201         ICOM_THIS(IClassFactoryImpl,iface);
202
203         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
204         return E_NOINTERFACE;
205 }
206
207 static ULONG WINAPI ScriptCF_AddRef(LPCLASSFACTORY iface)
208 {
209         ICOM_THIS(IClassFactoryImpl,iface);
210         return ++(This->ref);
211 }
212
213 static ULONG WINAPI ScriptCF_Release(LPCLASSFACTORY iface)
214 {
215         ICOM_THIS(IClassFactoryImpl,iface);
216         /* static class, won't be  freed */
217         return --(This->ref);
218 }
219
220 static HRESULT WINAPI ScriptCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
221 {
222         ICOM_THIS(IClassFactoryImpl,iface);
223
224         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
225         if (IsEqualIID (riid, &IID_IDirectMusicScript)) {
226                 return DMUSIC_CreateDirectMusicScript (riid, (LPDIRECTMUSICSCRIPT*)ppobj, pOuter);
227         } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
228                 return DMUSIC_CreateDirectMusicScriptObject (riid, (LPDIRECTMUSICOBJECT*)ppobj, pOuter);
229         }
230         
231         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
232         return E_NOINTERFACE;
233 }
234
235 static HRESULT WINAPI ScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
236 {
237         ICOM_THIS(IClassFactoryImpl,iface);
238         FIXME("(%p)->(%d),stub!\n", This, dolock);
239         return S_OK;
240 }
241
242 static ICOM_VTABLE(IClassFactory) ScriptCF_Vtbl = {
243         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
244         ScriptCF_QueryInterface,
245         ScriptCF_AddRef,
246         ScriptCF_Release,
247         ScriptCF_CreateInstance,
248         ScriptCF_LockServer
249 };
250
251 static IClassFactoryImpl Script_CF = {&ScriptCF_Vtbl, 1 };
252
253 /******************************************************************
254  *              DirectMusicScriptAutoImplPerformance ClassFactory
255  */
256 static HRESULT WINAPI ScriptAutoImplPerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
257 {
258         ICOM_THIS(IClassFactoryImpl,iface);
259
260         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
261         return E_NOINTERFACE;
262 }
263
264 static ULONG WINAPI ScriptAutoImplPerformanceCF_AddRef(LPCLASSFACTORY iface)
265 {
266         ICOM_THIS(IClassFactoryImpl,iface);
267         return ++(This->ref);
268 }
269
270 static ULONG WINAPI ScriptAutoImplPerformanceCF_Release(LPCLASSFACTORY iface)
271 {
272         ICOM_THIS(IClassFactoryImpl,iface);
273         /* static class, won't be  freed */
274         return --(This->ref);
275 }
276
277 static HRESULT WINAPI ScriptAutoImplPerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
278 {
279         ICOM_THIS(IClassFactoryImpl,iface);
280
281         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
282         
283         /* nothing here yet */
284         
285         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
286         return E_NOINTERFACE;
287 }
288
289 static HRESULT WINAPI ScriptAutoImplPerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
290 {
291         ICOM_THIS(IClassFactoryImpl,iface);
292         FIXME("(%p)->(%d),stub!\n", This, dolock);
293         return S_OK;
294 }
295
296 static ICOM_VTABLE(IClassFactory) ScriptAutoImplPerformanceCF_Vtbl = {
297         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
298         ScriptAutoImplPerformanceCF_QueryInterface,
299         ScriptAutoImplPerformanceCF_AddRef,
300         ScriptAutoImplPerformanceCF_Release,
301         ScriptAutoImplPerformanceCF_CreateInstance,
302         ScriptAutoImplPerformanceCF_LockServer
303 };
304
305 static IClassFactoryImpl ScriptAutoImplPerformance_CF = {&ScriptAutoImplPerformanceCF_Vtbl, 1 };
306
307 /******************************************************************
308  *              DirectMusicScriptSourceCodeLoader ClassFactory
309  */
310 static HRESULT WINAPI ScriptSourceCodeLoaderCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
311 {
312         ICOM_THIS(IClassFactoryImpl,iface);
313
314         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
315         return E_NOINTERFACE;
316 }
317
318 static ULONG WINAPI ScriptSourceCodeLoaderCF_AddRef(LPCLASSFACTORY iface)
319 {
320         ICOM_THIS(IClassFactoryImpl,iface);
321         return ++(This->ref);
322 }
323
324 static ULONG WINAPI ScriptSourceCodeLoaderCF_Release(LPCLASSFACTORY iface)
325 {
326         ICOM_THIS(IClassFactoryImpl,iface);
327         /* static class, won't be  freed */
328         return --(This->ref);
329 }
330
331 static HRESULT WINAPI ScriptSourceCodeLoaderCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
332 {
333         ICOM_THIS(IClassFactoryImpl,iface);
334
335         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
336         
337         /* nothing here yet */
338         
339         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
340         return E_NOINTERFACE;
341 }
342
343 static HRESULT WINAPI ScriptSourceCodeLoaderCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
344 {
345         ICOM_THIS(IClassFactoryImpl,iface);
346         FIXME("(%p)->(%d),stub!\n", This, dolock);
347         return S_OK;
348 }
349
350 static ICOM_VTABLE(IClassFactory) ScriptSourceCodeLoaderCF_Vtbl = {
351         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
352         ScriptSourceCodeLoaderCF_QueryInterface,
353         ScriptSourceCodeLoaderCF_AddRef,
354         ScriptSourceCodeLoaderCF_Release,
355         ScriptSourceCodeLoaderCF_CreateInstance,
356         ScriptSourceCodeLoaderCF_LockServer
357 };
358
359 static IClassFactoryImpl ScriptSourceCodeLoader_CF = {&ScriptSourceCodeLoaderCF_Vtbl, 1 };
360
361 /******************************************************************
362  *              DirectMusicScriptAutoImplSegmentState ClassFactory
363  */
364 static HRESULT WINAPI ScriptAutoImplSegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
365 {
366         ICOM_THIS(IClassFactoryImpl,iface);
367
368         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
369         return E_NOINTERFACE;
370 }
371
372 static ULONG WINAPI ScriptAutoImplSegmentStateCF_AddRef(LPCLASSFACTORY iface)
373 {
374         ICOM_THIS(IClassFactoryImpl,iface);
375         return ++(This->ref);
376 }
377
378 static ULONG WINAPI ScriptAutoImplSegmentStateCF_Release(LPCLASSFACTORY iface)
379 {
380         ICOM_THIS(IClassFactoryImpl,iface);
381         /* static class, won't be  freed */
382         return --(This->ref);
383 }
384
385 static HRESULT WINAPI ScriptAutoImplSegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
386 {
387         ICOM_THIS(IClassFactoryImpl,iface);
388
389         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
390         
391         /* nothing here yet */
392         
393         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
394         return E_NOINTERFACE;
395 }
396
397 static HRESULT WINAPI ScriptAutoImplSegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
398 {
399         ICOM_THIS(IClassFactoryImpl,iface);
400         FIXME("(%p)->(%d),stub!\n", This, dolock);
401         return S_OK;
402 }
403
404 static ICOM_VTABLE(IClassFactory) ScriptAutoImplSegmentStateCF_Vtbl = {
405         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
406         ScriptAutoImplSegmentStateCF_QueryInterface,
407         ScriptAutoImplSegmentStateCF_AddRef,
408         ScriptAutoImplSegmentStateCF_Release,
409         ScriptAutoImplSegmentStateCF_CreateInstance,
410         ScriptAutoImplSegmentStateCF_LockServer
411 };
412
413 static IClassFactoryImpl ScriptAutoImplSegmentState_CF = {&ScriptAutoImplSegmentStateCF_Vtbl, 1 };
414
415 /******************************************************************
416  *              DirectMusicScriptAutoImplAudioPathConfig ClassFactory
417  */
418 static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
419 {
420         ICOM_THIS(IClassFactoryImpl,iface);
421
422         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
423         return E_NOINTERFACE;
424 }
425
426 static ULONG WINAPI ScriptAutoImplAudioPathConfigCF_AddRef(LPCLASSFACTORY iface)
427 {
428         ICOM_THIS(IClassFactoryImpl,iface);
429         return ++(This->ref);
430 }
431
432 static ULONG WINAPI ScriptAutoImplAudioPathConfigCF_Release(LPCLASSFACTORY iface)
433 {
434         ICOM_THIS(IClassFactoryImpl,iface);
435         /* static class, won't be  freed */
436         return --(This->ref);
437 }
438
439 static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
440 {
441         ICOM_THIS(IClassFactoryImpl,iface);
442
443         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
444         
445         /* nothing here yet */
446         
447         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
448         return E_NOINTERFACE;
449 }
450
451 static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
452 {
453         ICOM_THIS(IClassFactoryImpl,iface);
454         FIXME("(%p)->(%d),stub!\n", This, dolock);
455         return S_OK;
456 }
457
458 static ICOM_VTABLE(IClassFactory) ScriptAutoImplAudioPathConfigCF_Vtbl = {
459         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
460         ScriptAutoImplAudioPathConfigCF_QueryInterface,
461         ScriptAutoImplAudioPathConfigCF_AddRef,
462         ScriptAutoImplAudioPathConfigCF_Release,
463         ScriptAutoImplAudioPathConfigCF_CreateInstance,
464         ScriptAutoImplAudioPathConfigCF_LockServer
465 };
466
467 static IClassFactoryImpl ScriptAutoImplAudioPathConfig_CF = {&ScriptAutoImplAudioPathConfigCF_Vtbl, 1 };
468
469 /******************************************************************
470  *              DirectMusicScriptAutoImplAudioPath ClassFactory
471  */
472 static HRESULT WINAPI ScriptAutoImplAudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
473 {
474         ICOM_THIS(IClassFactoryImpl,iface);
475
476         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
477         return E_NOINTERFACE;
478 }
479
480 static ULONG WINAPI ScriptAutoImplAudioPathCF_AddRef(LPCLASSFACTORY iface)
481 {
482         ICOM_THIS(IClassFactoryImpl,iface);
483         return ++(This->ref);
484 }
485
486 static ULONG WINAPI ScriptAutoImplAudioPathCF_Release(LPCLASSFACTORY iface)
487 {
488         ICOM_THIS(IClassFactoryImpl,iface);
489         /* static class, won't be  freed */
490         return --(This->ref);
491 }
492
493 static HRESULT WINAPI ScriptAutoImplAudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
494 {
495         ICOM_THIS(IClassFactoryImpl,iface);
496
497         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
498         
499         /* nothing here yet */
500         
501         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
502         return E_NOINTERFACE;
503 }
504
505 static HRESULT WINAPI ScriptAutoImplAudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
506 {
507         ICOM_THIS(IClassFactoryImpl,iface);
508         FIXME("(%p)->(%d),stub!\n", This, dolock);
509         return S_OK;
510 }
511
512 static ICOM_VTABLE(IClassFactory) ScriptAutoImplAudioPathCF_Vtbl = {
513         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
514         ScriptAutoImplAudioPathCF_QueryInterface,
515         ScriptAutoImplAudioPathCF_AddRef,
516         ScriptAutoImplAudioPathCF_Release,
517         ScriptAutoImplAudioPathCF_CreateInstance,
518         ScriptAutoImplAudioPathCF_LockServer
519 };
520
521 static IClassFactoryImpl ScriptAutoImplAudioPath_CF = {&ScriptAutoImplAudioPathCF_Vtbl, 1 };
522
523 /******************************************************************
524  *              DirectMusicScriptAutoImplSong ClassFactory
525  */
526 static HRESULT WINAPI ScriptAutoImplSongCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
527 {
528         ICOM_THIS(IClassFactoryImpl,iface);
529
530         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
531         return E_NOINTERFACE;
532 }
533
534 static ULONG WINAPI ScriptAutoImplSongCF_AddRef(LPCLASSFACTORY iface)
535 {
536         ICOM_THIS(IClassFactoryImpl,iface);
537         return ++(This->ref);
538 }
539
540 static ULONG WINAPI ScriptAutoImplSongCF_Release(LPCLASSFACTORY iface)
541 {
542         ICOM_THIS(IClassFactoryImpl,iface);
543         /* static class, won't be  freed */
544         return --(This->ref);
545 }
546
547 static HRESULT WINAPI ScriptAutoImplSongCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
548 {
549         ICOM_THIS(IClassFactoryImpl,iface);
550
551         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
552         
553         /* nothing here yet */
554         
555         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
556         return E_NOINTERFACE;
557 }
558
559 static HRESULT WINAPI ScriptAutoImplSongCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
560 {
561         ICOM_THIS(IClassFactoryImpl,iface);
562         FIXME("(%p)->(%d),stub!\n", This, dolock);
563         return S_OK;
564 }
565
566 static ICOM_VTABLE(IClassFactory) ScriptAutoImplSongCF_Vtbl = {
567         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
568         ScriptAutoImplSongCF_QueryInterface,
569         ScriptAutoImplSongCF_AddRef,
570         ScriptAutoImplSongCF_Release,
571         ScriptAutoImplSongCF_CreateInstance,
572         ScriptAutoImplSongCF_LockServer
573 };
574
575 static IClassFactoryImpl ScriptAutoImplSong_CF = {&ScriptAutoImplSongCF_Vtbl, 1 };
576
577 /******************************************************************
578  *              DllMain
579  *
580  *
581  */
582 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
583 {
584         if (fdwReason == DLL_PROCESS_ATTACH)
585         {
586             DisableThreadLibraryCalls(hinstDLL);
587                 /* FIXME: Initialisation */
588         }
589         else if (fdwReason == DLL_PROCESS_DETACH)
590         {
591                 /* FIXME: Cleanup */
592         }
593
594         return TRUE;
595 }
596
597
598 /******************************************************************
599  *              DllCanUnloadNow (DMSCRIPT.1)
600  *
601  *
602  */
603 HRESULT WINAPI DMSCRIPT_DllCanUnloadNow(void)
604 {
605     FIXME("(void): stub\n");
606
607     return S_FALSE;
608 }
609
610
611 /******************************************************************
612  *              DllGetClassObject (DMSCRIPT.2)
613  *
614  *
615  */
616 HRESULT WINAPI DMSCRIPT_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
617 {
618     TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
619     if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSegment) && IsEqualIID (riid, &IID_IClassFactory)) {
620       *ppv = (LPVOID) &ScriptAutoImplSegment_CF;
621       IClassFactory_AddRef((IClassFactory*)*ppv);
622       return S_OK;
623         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
624       *ppv = (LPVOID) &ScriptTrack_CF;
625       IClassFactory_AddRef((IClassFactory*)*ppv);
626       return S_OK;
627         } else if (IsEqualCLSID (rclsid, &CLSID_AudioVBScript) && IsEqualIID (riid, &IID_IClassFactory)) {
628       *ppv = (LPVOID) &AudioVBScript_CF;
629       IClassFactory_AddRef((IClassFactory*)*ppv);
630       return S_OK;
631         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScript) && IsEqualIID (riid, &IID_IClassFactory)) {
632       *ppv = (LPVOID) &Script_CF;
633       IClassFactory_AddRef((IClassFactory*)*ppv);
634       return S_OK;
635         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpPerformance) && IsEqualIID (riid, &IID_IClassFactory)) {
636       *ppv = (LPVOID) &ScriptAutoImplPerformance_CF;
637       IClassFactory_AddRef((IClassFactory*)*ppv);
638       return S_OK;
639         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScripSourceCodeLoader) && IsEqualIID (riid, &IID_IClassFactory)) {
640       *ppv = (LPVOID) &ScriptSourceCodeLoader_CF;
641       IClassFactory_AddRef((IClassFactory*)*ppv);
642       return S_OK;
643         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSegmentState) && IsEqualIID (riid, &IID_IClassFactory)) {
644       *ppv = (LPVOID) &ScriptAutoImplSegmentState_CF;
645       IClassFactory_AddRef((IClassFactory*)*ppv);
646       return S_OK;
647         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpAudioPathConfig) && IsEqualIID (riid, &IID_IClassFactory)) {
648       *ppv = (LPVOID) &ScriptAutoImplAudioPathConfig_CF;
649       IClassFactory_AddRef((IClassFactory*)*ppv);
650       return S_OK;
651         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpAudioPath) && IsEqualIID (riid, &IID_IClassFactory)) {
652       *ppv = (LPVOID) &ScriptAutoImplAudioPath_CF;
653       IClassFactory_AddRef((IClassFactory*)*ppv);
654       return S_OK;
655         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSong) && IsEqualIID (riid, &IID_IClassFactory)) {
656       *ppv = (LPVOID) &ScriptAutoImplSong_CF;
657       IClassFactory_AddRef((IClassFactory*)*ppv);
658       return S_OK;
659         }               
660
661     WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
662     return CLASS_E_CLASSNOTAVAILABLE;
663 }