Commit | Line | Data |
---|---|---|
df167d17 RM |
1 | /* IDirectMusicWaveTrack Implementation |
2 | * | |
0382ea1d | 3 | * Copyright (C) 2003-2004 Rok Mandeljc |
df167d17 | 4 | * |
7718d2bd AJ |
5 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU Lesser General Public | |
7 | * License as published by the Free Software Foundation; either | |
8 | * version 2.1 of the License, or (at your option) any later version. | |
df167d17 RM |
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 | |
7718d2bd AJ |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | * Lesser General Public License for more details. | |
df167d17 | 14 | * |
7718d2bd AJ |
15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this program; if not, write to the Free Software | |
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
df167d17 RM |
18 | */ |
19 | ||
df167d17 RM |
20 | #include "dmime_private.h" |
21 | ||
22 | WINE_DEFAULT_DEBUG_CHANNEL(dmime); | |
df167d17 RM |
23 | |
24 | /***************************************************************************** | |
25 | * IDirectMusicWaveTrack implementation | |
26 | */ | |
27 | /* IDirectMusicWaveTrack IUnknown part: */ | |
06e23dad | 28 | static HRESULT WINAPI IDirectMusicWaveTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { |
0382ea1d | 29 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface); |
b26d65bb | 30 | TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); |
df167d17 | 31 | |
0382ea1d | 32 | if (IsEqualIID (riid, &IID_IUnknown)) { |
49177a09 | 33 | *ppobj = &This->UnknownVtbl; |
06e23dad | 34 | IUnknown_AddRef (iface); |
0382ea1d RM |
35 | return S_OK; |
36 | } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) | |
37 | || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { | |
38 | *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; | |
06e23dad | 39 | IUnknown_AddRef (iface); |
df167d17 RM |
40 | return S_OK; |
41 | } else if (IsEqualIID (riid, &IID_IPersistStream)) { | |
49177a09 | 42 | *ppobj = &This->PersistStreamVtbl; |
06e23dad | 43 | IUnknown_AddRef (iface); |
df167d17 RM |
44 | return S_OK; |
45 | } | |
46 | ||
b26d65bb | 47 | WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); |
df167d17 RM |
48 | return E_NOINTERFACE; |
49 | } | |
50 | ||
06e23dad | 51 | static ULONG WINAPI IDirectMusicWaveTrack_IUnknown_AddRef (LPUNKNOWN iface) { |
0382ea1d | 52 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface); |
3da8524b PV |
53 | ULONG ref = InterlockedIncrement(&This->ref); |
54 | ||
891e0166 | 55 | TRACE("(%p) : AddRef from %d\n", This, ref - 1); |
3da8524b | 56 | |
1727eb48 JH |
57 | DMIME_LockModule(); |
58 | ||
3da8524b | 59 | return ref; |
df167d17 RM |
60 | } |
61 | ||
ff536fbe | 62 | static ULONG WINAPI IDirectMusicWaveTrack_IUnknown_Release (LPUNKNOWN iface) { |
0382ea1d | 63 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface); |
3da8524b | 64 | ULONG ref = InterlockedDecrement(&This->ref); |
891e0166 | 65 | TRACE("(%p) : ReleaseRef to %d\n", This, ref); |
1727eb48 | 66 | |
df167d17 RM |
67 | if (ref == 0) { |
68 | HeapFree(GetProcessHeap(), 0, This); | |
69 | } | |
1727eb48 JH |
70 | |
71 | DMIME_UnlockModule(); | |
72 | ||
df167d17 RM |
73 | return ref; |
74 | } | |
75 | ||
247246ed | 76 | static const IUnknownVtbl DirectMusicWaveTrack_Unknown_Vtbl = { |
0382ea1d RM |
77 | IDirectMusicWaveTrack_IUnknown_QueryInterface, |
78 | IDirectMusicWaveTrack_IUnknown_AddRef, | |
79 | IDirectMusicWaveTrack_IUnknown_Release | |
80 | }; | |
df167d17 | 81 | |
0382ea1d | 82 | /* IDirectMusicWaveTrack IDirectMusicTrack8 part: */ |
06e23dad | 83 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { |
0382ea1d | 84 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
06e23dad | 85 | return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); |
0382ea1d | 86 | } |
df167d17 | 87 | |
06e23dad | 88 | static ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { |
0382ea1d | 89 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
06e23dad | 90 | return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); |
df167d17 RM |
91 | } |
92 | ||
ff536fbe | 93 | static ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { |
0382ea1d | 94 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
06e23dad | 95 | return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); |
0382ea1d RM |
96 | } |
97 | ||
ff536fbe | 98 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) |
df167d17 | 99 | { |
0382ea1d RM |
100 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
101 | FIXME("(%p, %p): stub\n", This, pSegment); | |
102 | return S_OK; | |
103 | } | |
df167d17 | 104 | |
ff536fbe | 105 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) |
0382ea1d RM |
106 | { |
107 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); | |
891e0166 | 108 | FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); |
df167d17 RM |
109 | return S_OK; |
110 | } | |
111 | ||
ff536fbe | 112 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) |
df167d17 | 113 | { |
0382ea1d | 114 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
df167d17 | 115 | FIXME("(%p, %p): stub\n", This, pStateData); |
df167d17 RM |
116 | return S_OK; |
117 | } | |
118 | ||
ff536fbe | 119 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) |
df167d17 | 120 | { |
0382ea1d | 121 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
4bfb33ec | 122 | FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); |
df167d17 RM |
123 | return S_OK; |
124 | } | |
125 | ||
ff536fbe | 126 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { |
0382ea1d | 127 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
4bfb33ec | 128 | FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); |
df167d17 RM |
129 | return S_OK; |
130 | } | |
131 | ||
ff536fbe | 132 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { |
0382ea1d | 133 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
4bfb33ec | 134 | FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); |
df167d17 RM |
135 | return S_OK; |
136 | } | |
137 | ||
ff536fbe | 138 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { |
0382ea1d | 139 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
df167d17 | 140 | |
3f191fda | 141 | TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType)); |
df167d17 RM |
142 | if (IsEqualGUID (rguidType, &GUID_Disable_Auto_Download) |
143 | || IsEqualGUID (rguidType, &GUID_Download) | |
144 | || IsEqualGUID (rguidType, &GUID_DownloadToAudioPath) | |
145 | || IsEqualGUID (rguidType, &GUID_Enable_Auto_Download)) { | |
146 | TRACE("param supported\n"); | |
147 | return S_OK; | |
0382ea1d | 148 | } |
df167d17 RM |
149 | TRACE("param unsupported\n"); |
150 | return DMUS_E_TYPE_UNSUPPORTED; | |
151 | } | |
152 | ||
ff536fbe | 153 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { |
0382ea1d | 154 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
b26d65bb | 155 | FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); |
df167d17 RM |
156 | return S_OK; |
157 | } | |
158 | ||
ff536fbe | 159 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { |
0382ea1d | 160 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
b26d65bb | 161 | FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); |
df167d17 RM |
162 | return S_OK; |
163 | } | |
164 | ||
ff536fbe | 165 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { |
0382ea1d | 166 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
4bfb33ec | 167 | FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack); |
df167d17 RM |
168 | return S_OK; |
169 | } | |
170 | ||
ff536fbe | 171 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { |
0382ea1d | 172 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
891e0166 | 173 | FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart), |
7262a86c | 174 | wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID); |
df167d17 RM |
175 | return S_OK; |
176 | } | |
177 | ||
ff536fbe | 178 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { |
0382ea1d | 179 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
891e0166 | 180 | FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), |
7262a86c | 181 | wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags); |
df167d17 RM |
182 | return S_OK; |
183 | } | |
184 | ||
ff536fbe | 185 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { |
0382ea1d | 186 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
891e0166 | 187 | FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType), |
7262a86c | 188 | wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags); |
df167d17 RM |
189 | return S_OK; |
190 | } | |
191 | ||
ff536fbe | 192 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { |
0382ea1d | 193 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
891e0166 | 194 | FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); |
df167d17 RM |
195 | return S_OK; |
196 | } | |
197 | ||
ff536fbe | 198 | static HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { |
0382ea1d | 199 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface); |
4bfb33ec | 200 | FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); |
df167d17 RM |
201 | return S_OK; |
202 | } | |
203 | ||
247246ed | 204 | static const IDirectMusicTrack8Vtbl DirectMusicWaveTrack_Track_Vtbl = { |
0382ea1d RM |
205 | IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface, |
206 | IDirectMusicWaveTrack_IDirectMusicTrack_AddRef, | |
207 | IDirectMusicWaveTrack_IDirectMusicTrack_Release, | |
208 | IDirectMusicWaveTrack_IDirectMusicTrack_Init, | |
209 | IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay, | |
210 | IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay, | |
211 | IDirectMusicWaveTrack_IDirectMusicTrack_Play, | |
212 | IDirectMusicWaveTrack_IDirectMusicTrack_GetParam, | |
213 | IDirectMusicWaveTrack_IDirectMusicTrack_SetParam, | |
214 | IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported, | |
215 | IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType, | |
216 | IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType, | |
217 | IDirectMusicWaveTrack_IDirectMusicTrack_Clone, | |
218 | IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx, | |
219 | IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx, | |
220 | IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx, | |
221 | IDirectMusicWaveTrack_IDirectMusicTrack_Compose, | |
222 | IDirectMusicWaveTrack_IDirectMusicTrack_Join | |
df167d17 RM |
223 | }; |
224 | ||
0382ea1d | 225 | /* IDirectMusicWaveTrack IPersistStream part: */ |
06e23dad | 226 | static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { |
0382ea1d | 227 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface); |
06e23dad | 228 | return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); |
df167d17 RM |
229 | } |
230 | ||
06e23dad | 231 | static ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { |
0382ea1d | 232 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface); |
06e23dad | 233 | return IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); |
df167d17 RM |
234 | } |
235 | ||
ff536fbe | 236 | static ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { |
0382ea1d | 237 | ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface); |
06e23dad | 238 | return IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); |
df167d17 RM |
239 | } |
240 | ||
ff536fbe | 241 | static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { |
df167d17 RM |
242 | return E_NOTIMPL; |
243 | } | |
244 | ||
ff536fbe | 245 | static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { |
df167d17 RM |
246 | return E_NOTIMPL; |
247 | } | |
248 | ||
ff536fbe | 249 | static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { |
df167d17 RM |
250 | FIXME(": Loading not implemented yet\n"); |
251 | return S_OK; | |
252 | } | |
253 | ||
ff536fbe | 254 | static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { |
df167d17 RM |
255 | return E_NOTIMPL; |
256 | } | |
257 | ||
ff536fbe | 258 | static HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { |
df167d17 RM |
259 | return E_NOTIMPL; |
260 | } | |
261 | ||
247246ed | 262 | static const IPersistStreamVtbl DirectMusicWaveTrack_PersistStream_Vtbl = { |
0382ea1d RM |
263 | IDirectMusicWaveTrack_IPersistStream_QueryInterface, |
264 | IDirectMusicWaveTrack_IPersistStream_AddRef, | |
265 | IDirectMusicWaveTrack_IPersistStream_Release, | |
266 | IDirectMusicWaveTrack_IPersistStream_GetClassID, | |
267 | IDirectMusicWaveTrack_IPersistStream_IsDirty, | |
268 | IDirectMusicWaveTrack_IPersistStream_Load, | |
269 | IDirectMusicWaveTrack_IPersistStream_Save, | |
270 | IDirectMusicWaveTrack_IPersistStream_GetSizeMax | |
df167d17 | 271 | }; |
0382ea1d RM |
272 | |
273 | /* for ClassFactory */ | |
274 | HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) { | |
275 | IDirectMusicWaveTrack* track; | |
276 | ||
277 | track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicWaveTrack)); | |
278 | if (NULL == track) { | |
ee0344a4 | 279 | *ppobj = NULL; |
0382ea1d RM |
280 | return E_OUTOFMEMORY; |
281 | } | |
282 | track->UnknownVtbl = &DirectMusicWaveTrack_Unknown_Vtbl; | |
283 | track->TrackVtbl = &DirectMusicWaveTrack_Track_Vtbl; | |
284 | track->PersistStreamVtbl = &DirectMusicWaveTrack_PersistStream_Vtbl; | |
285 | track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); | |
286 | DM_STRUCT_INIT(track->pDesc); | |
287 | track->pDesc->dwValidData |= DMUS_OBJ_CLASS; | |
be2f48cd | 288 | track->pDesc->guidClass = CLSID_DirectMusicWaveTrack; |
0382ea1d | 289 | track->ref = 0; /* will be inited by QueryInterface */ |
be2f48cd | 290 | |
0382ea1d RM |
291 | return IDirectMusicWaveTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); |
292 | } |