575154f9c73cbdf49ddadb6bacf82caf0fd92dea
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
14 // Disable some warnings in headers only
16 #pragma warning(disable:4244) // possible loss of data
17 #pragma warning(disable:4512) // assignment operator could not be gernerated
20 #define USE_SYSTEM_MENUDESKBAR 0
21 #define USE_SYSTEM_MENUSITE 0
22 #define USE_SYSTEM_MENUBAND 0
24 #define WRAP_MENUDESKBAR 0
25 #define WRAP_MENUSITE 0
26 #define WRAP_MENUBAND 0
27 #define WRAP_TRAYPRIV 0
29 #define MERGE_FOLDERS 0
34 #define WIN32_NO_STATUS
36 #define COM_NO_WINDOWS_H
48 #include <shlobj_undoc.h>
50 #include <shlguid_undoc.h>
56 #include <wine/debug.h>
63 #define shell32_hInstance 0
65 extern "C" INT WINAPI
Shell_GetCachedImageIndex(LPCWSTR szPath
, INT nIndex
, UINT bSimulateDoc
);
67 extern "C" HRESULT WINAPI
CStartMenu_Constructor(REFIID riid
, void **ppv
);
68 extern "C" HRESULT WINAPI
CMenuDeskBar_Constructor(REFIID riid
, LPVOID
*ppv
);
69 extern "C" HRESULT WINAPI
CMenuSite_Constructor(REFIID riid
, LPVOID
*ppv
);
70 extern "C" HRESULT WINAPI
CMenuBand_Constructor(REFIID riid
, LPVOID
*ppv
);
71 extern "C" HRESULT WINAPI
CMenuDeskBar_Wrapper(IDeskBar
* db
, REFIID riid
, LPVOID
*ppv
);
72 extern "C" HRESULT WINAPI
CMenuSite_Wrapper(IBandSite
* bs
, REFIID riid
, LPVOID
*ppv
);
73 extern "C" HRESULT WINAPI
CMenuBand_Wrapper(IShellMenu
* sm
, REFIID riid
, LPVOID
*ppv
);
74 extern "C" HRESULT WINAPI
CMergedFolder_Constructor(IShellFolder
* userLocal
, IShellFolder
* allUsers
, REFIID riid
, LPVOID
*ppv
);
75 extern "C" HRESULT WINAPI
CStartMenuSite_Wrapper(ITrayPriv
* trayPriv
, REFIID riid
, LPVOID
*ppv
);
78 Win32DbgPrint(const char *filename
, int line
, const char *lpFormat
, ...)
86 fname
= strrchr(filename
, '\\');
89 fname
= strrchr(filename
, '/');
97 szMsgStart
= szMsg
+ sprintf(szMsg
, "[%10lu] %s:%d: ", GetTickCount(), fname
, line
);
99 va_start(vl
, lpFormat
);
100 uRet
= (ULONG
) vsprintf(szMsgStart
, lpFormat
, vl
);
103 OutputDebugStringA(szMsg
);
108 #define DbgPrint(fmt, ...) \
109 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
112 #define FAILED_UNEXPECTEDLY(hr) (FAILED(hr) && (DbgPrint("Unexpected failure %08x.\n", hr), TRUE))
114 #define FAILED_UNEXPECTEDLY(hr) FAILED(hr)
118 template <class Base
>
119 class CComDebugObject
: public Base
122 CComDebugObject(void * = NULL
)
127 virtual ~CComDebugObject()
129 this->FinalRelease();
130 _pAtlModule
->Unlock();
133 STDMETHOD_(ULONG
, AddRef
)()
135 int rc
= this->InternalAddRef();
136 DbgPrint("RefCount is now %d(++)!\n", rc
);
140 STDMETHOD_(ULONG
, Release
)()
144 newRefCount
= this->InternalRelease();
145 DbgPrint("RefCount is now %d(--)!\n", newRefCount
);
146 if (newRefCount
== 0)
151 STDMETHOD(QueryInterface
)(REFIID iid
, void **ppvObject
)
153 return this->_InternalQueryInterface(iid
, ppvObject
);
156 static HRESULT WINAPI
CreateInstance(CComDebugObject
<Base
> **pp
)
158 CComDebugObject
<Base
> *newInstance
;
161 ATLASSERT(pp
!= NULL
);
165 hResult
= E_OUTOFMEMORY
;
167 ATLTRY(newInstance
= new CComDebugObject
<Base
>())
168 if (newInstance
!= NULL
)
170 newInstance
->SetVoid(NULL
);
171 newInstance
->InternalFinalConstructAddRef();
172 hResult
= newInstance
->_AtlInitialConstruct();
173 if (SUCCEEDED(hResult
))
174 hResult
= newInstance
->FinalConstruct();
175 if (SUCCEEDED(hResult
))
176 hResult
= newInstance
->_AtlFinalConstruct();
177 newInstance
->InternalFinalConstructRelease();