ReactOS 0.4.16-dev-1786-gfe497a2
debugging.c
Go to the documentation of this file.
1/*
2 * Copyright 2011 Alistair Leslie-Hughes
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#define COBJMACROS
20#include <stdio.h>
21
22#include "windows.h"
23#include "ole2.h"
24#include "corerror.h"
25#include "mscoree.h"
26#include "corhdr.h"
27
28#include "wine/test.h"
29
30#include "initguid.h"
31#include "cordebug.h"
32
34
35static HRESULT (WINAPI *pCreateDebuggingInterfaceFromVersion)(int, LPCWSTR, IUnknown **);
36
37const WCHAR v2_0[] = {'v','2','.','0','.','5','0','7','2','7',0};
38
40{
41 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ICorDebugManagedCallback2, riid))
42 {
43 *ppv = iface;
44 return S_OK;
45 }
46
47 ok(0, "unexpected riid (%s)\n", debugstr_guid(riid));
48
49 *ppv = NULL;
50 return E_NOINTERFACE;
51}
52
54{
55 return 2;
56}
57
59{
60 return 1;
61}
62
64 ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
65 ICorDebugFunction *pOldFunction, ICorDebugFunction *pNewFunction,
66 ULONG32 oldILOffset)
67{
68 ok(0, "unexpected call\n");
69 return E_NOTIMPL;
70}
71
73 ICorDebugProcess *pProcess, CONNID dwConnectionId, WCHAR *pConnName)
74{
75 ok(0, "unexpected call\n");
76 return E_NOTIMPL;
77}
78
80 ICorDebugProcess *pProcess, CONNID dwConnectionId)
81{
82 ok(0, "unexpected call\n");
83 return E_NOTIMPL;
84}
85
87 ICorDebugProcess *pProcess, CONNID dwConnectionId)
88{
89 ok(0, "unexpected call\n");
90 return E_NOTIMPL;
91}
92
94 ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
95 ICorDebugFrame *pFrame, ULONG32 nOffset,
96 CorDebugExceptionCallbackType dwEventType, DWORD dwFlags)
97{
98 ok(0, "unexpected call\n");
99 return E_NOTIMPL;
100}
101
103 ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
104 CorDebugExceptionUnwindCallbackType dwEventType, DWORD dwFlags)
105{
106 ok(0, "unexpected call\n");
107 return E_NOTIMPL;
108}
109
111 ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
112 ICorDebugFunction *pFunction)
113{
114 ok(0, "unexpected call\n");
115 return E_NOTIMPL;
116}
117
119 ICorDebugController *pController, ICorDebugThread *pThread,
120 ICorDebugMDA *pMDA)
121{
122 ok(0, "unexpected call\n");
123 return E_NOTIMPL;
124}
125
126static struct ICorDebugManagedCallback2Vtbl managedCallback2Vtbl = {
138};
139
141
143{
144 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ICorDebugManagedCallback, riid))
145 {
146 *ppv = iface;
147 return S_OK;
148 }
149 else if(IsEqualGUID(&IID_ICorDebugManagedCallback2, riid))
150 {
151 *ppv = (void**)&ManagedCallback2;
152 return S_OK;
153 }
154
155 ok(0, "unexpected riid (%s)\n", debugstr_guid(riid));
156 *ppv = NULL;
157 return E_NOINTERFACE;
158}
159
161{
162 return 2;
163}
164
166{
167 return 1;
168}
169
171 ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint)
172{
173 ok(0, "unexpected call\n");
174 return E_NOTIMPL;
175}
176
178 ICorDebugThread *pThread, ICorDebugStepper *pStepper, CorDebugStepReason reason)
179{
180 ok(0, "unexpected call\n");
181 return E_NOTIMPL;
182}
183
186{
187 ok(0, "unexpected call\n");
188 return E_NOTIMPL;
189}
190
192 ICorDebugThread *pThread, BOOL unhandled)
193{
194 ok(0, "unexpected call\n");
195 return E_NOTIMPL;
196}
197
199 ICorDebugThread *pThread, ICorDebugEval *pEval)
200{
201 ok(0, "unexpected call\n");
202 return E_NOTIMPL;
203}
204
206 ICorDebugThread *pThread, ICorDebugEval *pEval)
207{
208 ok(0, "unexpected call\n");
209 return E_NOTIMPL;
210}
211
213{
214 ok(0, "unexpected call\n");
215 return E_NOTIMPL;
216}
217
219{
220 ok(0, "unexpected call\n");
221 return E_NOTIMPL;
222}
223
226{
227 ok(0, "unexpected call\n");
228 return E_NOTIMPL;
229}
230
233{
234 ok(0, "unexpected call\n");
235 return E_NOTIMPL;
236}
237
239 ICorDebugModule *pModule)
240{
241 ok(0, "unexpected call\n");
242 return E_NOTIMPL;
243}
244
246 ICorDebugModule *pModule)
247{
248 ok(0, "unexpected call\n");
249 return E_NOTIMPL;
250}
251
254{
255 ok(0, "unexpected call\n");
256 return E_NOTIMPL;
257}
258
261{
262 ok(0, "unexpected call\n");
263 return E_NOTIMPL;
264}
265
267 HRESULT errorHR, DWORD errorCode)
268{
269 ok(0, "unexpected call\n");
270 return E_NOTIMPL;
271}
272
274 ICorDebugThread *pThread, LONG lLevel, WCHAR *pLogSwitchName, WCHAR *pMessage)
275{
276 ok(0, "unexpected call\n");
277 return E_NOTIMPL;
278}
279
281 ICorDebugThread *pThread, LONG lLevel, ULONG ulReason,
282 WCHAR *pLogSwitchName, WCHAR *pParentName)
283{
284 ok(0, "unexpected call\n");
285 return E_NOTIMPL;
286}
287
289 ICorDebugAppDomain *pAppDomain)
290{
291 ok(0, "unexpected call\n");
292 return E_NOTIMPL;
293}
294
296 ICorDebugAppDomain *pAppDomain)
297{
298 ok(0, "unexpected call\n");
299 return E_NOTIMPL;
300}
301
303 ICorDebugAssembly *pAssembly)
304{
305 ok(0, "unexpected call\n");
306 return E_NOTIMPL;
307}
308
310 ICorDebugAssembly *pAssembly)
311{
312 ok(0, "unexpected call\n");
313 return E_NOTIMPL;
314}
315
317{
318 ok(0, "unexpected call\n");
319 return E_NOTIMPL;
320}
321
323 ICorDebugThread *pThread)
324{
325 ok(0, "unexpected call\n");
326 return E_NOTIMPL;
327}
328
330 ICorDebugModule *pModule, IStream *pSymbolStream)
331{
332 ok(0, "unexpected call\n");
333 return E_NOTIMPL;
334}
335
337 ICorDebugThread *pThread, ICorDebugFunction *pFunction, BOOL fAccurate)
338{
339 ok(0, "unexpected call\n");
340 return E_NOTIMPL;
341}
342
344 ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint, DWORD dwError)
345{
346 ok(0, "unexpected call\n");
347 return E_NOTIMPL;
348}
349
350static ICorDebugManagedCallbackVtbl managedCallbackVtbl = {
380};
381
383
385{
386 hmscoree = LoadLibraryA("mscoree.dll");
387
388 if (!hmscoree)
389 {
390 win_skip("mscoree.dll not available\n");
391 return FALSE;
392 }
393
394 pCreateDebuggingInterfaceFromVersion = (void *)GetProcAddress(hmscoree, "CreateDebuggingInterfaceFromVersion");
395
396 if (!pCreateDebuggingInterfaceFromVersion)
397 {
398 win_skip("functions not available\n");
400 return FALSE;
401 }
402
403 return TRUE;
404}
405
406#define check_process_enum(core, e) _check_process_enum(__LINE__, core, e)
407static void _check_process_enum(unsigned line, ICorDebug *pCorDebug, ULONG nExpected)
408{
409 HRESULT hr;
410 ICorDebugProcessEnum *pProcessEnum = NULL;
411
412 hr = ICorDebug_EnumerateProcesses(pCorDebug, NULL);
413 ok_(__FILE__,line) (hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr);
414
415 hr = ICorDebug_EnumerateProcesses(pCorDebug, &pProcessEnum);
416 ok_(__FILE__,line) (hr == S_OK, "expected S_OK got %08x\n", hr);
417 if(hr == S_OK)
418 {
419 ULONG cnt;
420
421 hr = ICorDebugProcessEnum_GetCount(pProcessEnum, &cnt);
422 ok_(__FILE__,line) (hr == S_OK, "expected S_OK got %08x\n", hr);
423 ok_(__FILE__,line) (cnt == nExpected, "expected %d got %d\n", nExpected, cnt);
424
425 ICorDebugProcessEnum_Release(pProcessEnum);
426 }
427}
428
429static void test_createDebugger(void)
430{
431 HRESULT hr;
432 IUnknown *pUnk;
433 ICorDebug *pCorDebug;
434
435 hr = pCreateDebuggingInterfaceFromVersion(0, v2_0, &pUnk);
436 ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
437
438 hr = pCreateDebuggingInterfaceFromVersion(1, v2_0, &pUnk);
439 ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
440
441 hr = pCreateDebuggingInterfaceFromVersion(2, v2_0, &pUnk);
442 ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
443
444 hr = pCreateDebuggingInterfaceFromVersion(4, v2_0, &pUnk);
445 ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
446
447 hr = pCreateDebuggingInterfaceFromVersion(3, v2_0, NULL);
448 ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
449
450 hr = pCreateDebuggingInterfaceFromVersion(3, v2_0, &pUnk);
451 if(hr == S_OK)
452 {
453 hr = IUnknown_QueryInterface(pUnk, &IID_ICorDebug, (void**)&pCorDebug);
454 ok(hr == S_OK, "expected S_OK got %08x\n", hr);
455 if(hr == S_OK)
456 {
457 hr = ICorDebug_Initialize(pCorDebug);
458 ok(hr == S_OK, "expected S_OK got %08x\n", hr);
459 if(hr == S_OK)
460 {
461 hr = ICorDebug_SetManagedHandler(pCorDebug, NULL);
462 ok(hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr);
463
464 hr = ICorDebug_SetManagedHandler(pCorDebug, &ManagedCallback);
465 ok(hr == S_OK, "expected S_OK got %08x\n", hr);
466
467 /* We should have no processes */
468 check_process_enum(pCorDebug, 0);
469 }
470
471 ICorDebug_Release(pCorDebug);
472 }
473 IUnknown_Release(pUnk);
474 }
475 else
476 {
477 skip(".NET 2.0 or mono not installed.\n");
478 }
479}
480
481START_TEST(debugging)
482{
484
486 return;
487
489
492}
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define START_TEST(x)
Definition: atltest.h:75
#define ok_(x1, x2)
Definition: atltest.h:61
static HANDLE thread
Definition: service.c:33
unsigned int ULONG32
Definition: basetsd.h:117
const GUID IID_IUnknown
DWORD CONNID
Definition: cordebug.idl:94
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
static IUnknown **const WCHAR v2_0[]
Definition: debugging.c:37
static HRESULT WINAPI ManagedCallback_LogSwitch(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, LONG lLevel, ULONG ulReason, WCHAR *pLogSwitchName, WCHAR *pParentName)
Definition: debugging.c:280
static HRESULT WINAPI ManagedCallback2_QueryInterface(ICorDebugManagedCallback2 *iface, REFIID riid, void **ppv)
Definition: debugging.c:39
#define check_process_enum(core, e)
Definition: debugging.c:406
static BOOL init_functionpointers(void)
Definition: debugging.c:384
static ULONG WINAPI ManagedCallback2_AddRef(ICorDebugManagedCallback2 *iface)
Definition: debugging.c:53
static HRESULT WINAPI ManagedCallback_UnloadClass(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugClass *c)
Definition: debugging.c:259
static ULONG WINAPI ManagedCallback_Release(ICorDebugManagedCallback *iface)
Definition: debugging.c:165
static HRESULT WINAPI ManagedCallback_EvalComplete(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugEval *pEval)
Definition: debugging.c:198
static HRESULT WINAPI ManagedCallback_NameChange(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread)
Definition: debugging.c:322
static HRESULT WINAPI ManagedCallback_ExitProcess(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess)
Definition: debugging.c:218
static HRESULT WINAPI ManagedCallback_Break(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *thread)
Definition: debugging.c:184
static ULONG WINAPI ManagedCallback2_Release(ICorDebugManagedCallback2 *iface)
Definition: debugging.c:58
static HRESULT WINAPI ManagedCallback_LogMessage(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, LONG lLevel, WCHAR *pLogSwitchName, WCHAR *pMessage)
Definition: debugging.c:273
static HRESULT WINAPI ManagedCallback_LoadModule(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugModule *pModule)
Definition: debugging.c:238
static HRESULT WINAPI ManagedCallback_UnloadModule(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugModule *pModule)
Definition: debugging.c:245
static HRESULT WINAPI ManagedCallback_Exception(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, BOOL unhandled)
Definition: debugging.c:191
static HRESULT WINAPI ManagedCallback_ControlCTrap(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess)
Definition: debugging.c:316
static HRESULT WINAPI ManagedCallback_BreakpointSetError(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint, DWORD dwError)
Definition: debugging.c:343
static HRESULT WINAPI ManagedCallback2_Exception(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFrame *pFrame, ULONG32 nOffset, CorDebugExceptionCallbackType dwEventType, DWORD dwFlags)
Definition: debugging.c:93
static HRESULT WINAPI ManagedCallback_LoadAssembly(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugAssembly *pAssembly)
Definition: debugging.c:302
static HRESULT WINAPI ManagedCallback2_FunctionRemapComplete(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFunction *pFunction)
Definition: debugging.c:110
static HMODULE hmscoree
Definition: debugging.c:33
static HRESULT WINAPI ManagedCallback_CreateThread(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *thread)
Definition: debugging.c:224
static HRESULT WINAPI ManagedCallback_QueryInterface(ICorDebugManagedCallback *iface, REFIID riid, void **ppv)
Definition: debugging.c:142
static HRESULT WINAPI ManagedCallback_CreateProcess(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess)
Definition: debugging.c:212
static HRESULT WINAPI ManagedCallback_LoadClass(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugClass *c)
Definition: debugging.c:252
static ICorDebugManagedCallback ManagedCallback
Definition: debugging.c:382
static ICorDebugManagedCallback2 ManagedCallback2
Definition: debugging.c:140
static HRESULT WINAPI ManagedCallback_EvalException(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugEval *pEval)
Definition: debugging.c:205
static HRESULT WINAPI ManagedCallback_UnloadAssembly(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugAssembly *pAssembly)
Definition: debugging.c:309
static LPCWSTR
Definition: debugging.c:35
static HRESULT WINAPI ManagedCallback_ExitThread(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *thread)
Definition: debugging.c:231
static struct ICorDebugManagedCallback2Vtbl managedCallback2Vtbl
Definition: debugging.c:126
static HRESULT WINAPI ManagedCallback2_FunctionRemapOpportunity(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFunction *pOldFunction, ICorDebugFunction *pNewFunction, ULONG32 oldILOffset)
Definition: debugging.c:63
static HRESULT WINAPI ManagedCallback_Breakpoint(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint)
Definition: debugging.c:170
static HRESULT WINAPI ManagedCallback2_ChangeConnection(ICorDebugManagedCallback2 *iface, ICorDebugProcess *pProcess, CONNID dwConnectionId)
Definition: debugging.c:79
static HRESULT WINAPI ManagedCallback_EditAndContinueRemap(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFunction *pFunction, BOOL fAccurate)
Definition: debugging.c:336
static HRESULT WINAPI ManagedCallback_UpdateModuleSymbols(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugModule *pModule, IStream *pSymbolStream)
Definition: debugging.c:329
static void test_createDebugger(void)
Definition: debugging.c:429
static ICorDebugManagedCallbackVtbl managedCallbackVtbl
Definition: debugging.c:350
static HRESULT WINAPI ManagedCallback2_MDANotification(ICorDebugManagedCallback2 *iface, ICorDebugController *pController, ICorDebugThread *pThread, ICorDebugMDA *pMDA)
Definition: debugging.c:118
static HRESULT WINAPI ManagedCallback2_DestroyConnection(ICorDebugManagedCallback2 *iface, ICorDebugProcess *pProcess, CONNID dwConnectionId)
Definition: debugging.c:86
static HRESULT WINAPI ManagedCallback2_ExceptionUnwind(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, CorDebugExceptionUnwindCallbackType dwEventType, DWORD dwFlags)
Definition: debugging.c:102
static HRESULT WINAPI ManagedCallback_DebuggerError(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess, HRESULT errorHR, DWORD errorCode)
Definition: debugging.c:266
static ULONG WINAPI ManagedCallback_AddRef(ICorDebugManagedCallback *iface)
Definition: debugging.c:160
static HRESULT WINAPI ManagedCallback_ExitAppDomain(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess, ICorDebugAppDomain *pAppDomain)
Definition: debugging.c:295
static void _check_process_enum(unsigned line, ICorDebug *pCorDebug, ULONG nExpected)
Definition: debugging.c:407
static HRESULT WINAPI ManagedCallback_StepComplete(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugStepper *pStepper, CorDebugStepReason reason)
Definition: debugging.c:177
static HRESULT WINAPI ManagedCallback_CreateAppDomain(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess, ICorDebugAppDomain *pAppDomain)
Definition: debugging.c:288
static HRESULT WINAPI ManagedCallback2_CreateConnection(ICorDebugManagedCallback2 *iface, ICorDebugProcess *pProcess, CONNID dwConnectionId, WCHAR *pConnName)
Definition: debugging.c:72
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLubyte * c
Definition: glext.h:8905
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define win_skip
Definition: minitest.h:67
LPCWSTR LPCWSTR LPCWSTR DWORD dwFlags
Definition: env.c:37
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
HRESULT hr
Definition: shlfolder.c:183
Definition: parser.c:49
uint32_t ULONG
Definition: typedefs.h:59
_In_ size_t cnt
Definition: wcstombs.cpp:43
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
__wchar_t WCHAR
Definition: xmlstorage.h:180