1 
2 #ifdef _MSC_VER
3 
4 // Disabling spammy warnings when compiling with /W4 or /Wall
5 #pragma warning(disable:4100) // unreferenced formal parameter
6 #pragma warning(disable:4201) // nonstandard extension used
7 #pragma warning(disable:4265) // class has virtual functions, but destructor is not virtual
8 #pragma warning(disable:4365) // signed/unsigned mismatch
9 #pragma warning(disable:4514) // unreferenced inline function
10 #pragma warning(disable:4710) // function was not inlined
11 #pragma warning(disable:4820) // padding added
12 #pragma warning(disable:4946) // reinterpret_cast between related classes
13 
14 // Disable some warnings in headers only
15 #pragma warning(push)
16 #pragma warning(disable:4244) // possible loss of data
17 #pragma warning(disable:4512) // assignment operator could not be gernerated
18 #endif
19 
20 #include <stdio.h>
21 #include <tchar.h>
22 
23 #define WIN32_NO_STATUS
24 #define _INC_WINDOWS
25 #define COM_NO_WINDOWS_H
26 
27 #define COBJMACROS
28 
29 //#define DEBUG_CCOMOBJECT
30 #define DEBUG_CCOMOBJECT_CREATION 1
31 #define DEBUG_CCOMOBJECT_DESTRUCTION 1
32 #define DEBUG_CCOMOBJECT_REFCOUNTING 1
33 
34 #include <windef.h>
35 #include <winbase.h>
36 #include <winreg.h>
37 #include <wingdi.h>
38 #include <winnls.h>
39 #include <wincon.h>
40 #include <shellapi.h>
41 #include <shlobj.h>
42 #include <shlobj_undoc.h>
43 #include <shlwapi.h>
44 #include <shlguid_undoc.h>
45 #include <uxtheme.h>
46 #include <strsafe.h>
47 
48 #include <atlbase.h>
49 #include <atlcom.h>
50 #include <atlwin.h>
51 #include <undocshell.h>
52 #include <undocuser.h>
53 
54 #include <shellutils.h>
55 #include <ui/rosctrls.h>
56 #include "../shresdef.h"
57 
58 #include <wine/debug.h>
59 
60 #if _MSC_VER
61 // Restore warnings
62 #pragma warning(pop)
63 #endif
64 
65 #define USE_SYSTEM_MENUDESKBAR 0
66 #define USE_SYSTEM_MENUSITE 0
67 #define USE_SYSTEM_MENUBAND 0
68 #define USE_SYSTEM_MERGED_FOLDERS 0
69 
70 #define MERGE_FOLDERS 1
71 
72 #if USE_SYSTEM_MENUDESKBAR
73 #define CMenuDeskBar_CreateInstance(riid, ppv) (CoCreateInstance(CLSID_MenuDeskBar, NULL, CLSCTX_INPROC_SERVER,riid, ppv))
74 #else
75 #define CMenuDeskBar_CreateInstance RSHELL_CMenuDeskBar_CreateInstance
76 #endif
77 
78 #if USE_SYSTEM_MENUBAND
79 #define CMenuBand_CreateInstance(riid, ppv) (CoCreateInstance(CLSID_MenuBand, NULL, CLSCTX_INPROC_SERVER,riid, ppv))
80 #else
81 #define CMenuBand_CreateInstance RSHELL_CMenuBand_CreateInstance
82 #endif
83 
84 #if USE_SYSTEM_MENUSITE
85 #define CMenuSite_CreateInstance(riid, ppv) (CoCreateInstance(CLSID_MenuBandSite, NULL, CLSCTX_INPROC_SERVER,riid, ppv))
86 #else
87 #define CMenuSite_CreateInstance RSHELL_CMenuSite_CreateInstance
88 #endif
89 
90 #if USE_SYSTEM_MERGED_FOLDERS
91 #define CMergedFolder_CreateInstance(riid, ppv) (CoCreateInstance(CLSID_MergedFolder, NULL, CLSCTX_INPROC_SERVER,riid, ppv))
92 #else
93 #define CMergedFolder_CreateInstance RSHELL_CMergedFolder_CreateInstance
94 #endif
95 
96 extern "C"
97 {
98 extern HINSTANCE shell32_hInstance;
99 
100 HRESULT WINAPI RSHELL_CStartMenu_CreateInstance(REFIID riid, void **ppv);
101 HRESULT WINAPI RSHELL_CMenuDeskBar_CreateInstance(REFIID riid, LPVOID *ppv);
102 HRESULT WINAPI RSHELL_CMenuSite_CreateInstance(REFIID riid, LPVOID *ppv);
103 HRESULT WINAPI RSHELL_CMenuBand_CreateInstance(REFIID riid, LPVOID *ppv);
104 HRESULT WINAPI RSHELL_CMergedFolder_CreateInstance(REFIID riid, LPVOID *ppv);
105 
106 }
107