19 #ifndef __ROS_SHELL_UTILS_H 20 #define __ROS_SHELL_UTILS_H 47 szMsgStart = szMsg +
sprintf(szMsg,
"%s:%d: ", fname,
line);
59 #define DbgPrint(fmt, ...) \ 60 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__) 63 # define IID_PPV_ARG(Itype, ppType) IID_##Itype, reinterpret_cast<void**>((static_cast<Itype**>(ppType))) 64 # define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, reinterpret_cast<void**>((static_cast<Itype**>(ppType))) 66 # define IID_PPV_ARG(Itype, ppType) IID_##Itype, (void**)(ppType) 67 # define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, (void**)(ppType) 71 #define FAILED_UNEXPECTEDLY(hr) (FAILED(hr) && (Win32DbgPrint(__FILE__, __LINE__, "Unexpected failure %08x.\n", hr), TRUE)) 73 #define FAILED_UNEXPECTEDLY(hr) FAILED(hr) 82 class CComCreatorCentralInstance
101 static_cast<IUnknown *>(pObj)->Release();
115 template <
typename T>
116 IUnknown *CComCreatorCentralInstance<T>::s_pInstance =
NULL;
118 #define DECLARE_CENTRAL_INSTANCE_NOT_AGGREGATABLE(x) \ 120 typedef CComCreatorCentralInstance< ATL::CComObject<x> > _CreatorClass; 124 template <
class Base>
125 class CComDebugObject :
public Base 128 CComDebugObject(
void * =
NULL)
130 #if DEBUG_CCOMOBJECT_CREATION 136 virtual ~CComDebugObject()
138 this->FinalRelease();
139 _pAtlModule->Unlock();
144 int rc = this->InternalAddRef();
145 #if DEBUG_CCOMOBJECT_REFCOUNTING 153 int rc = this->InternalRelease();
155 #if DEBUG_CCOMOBJECT_REFCOUNTING 161 #if DEBUG_CCOMOBJECT_DESTRUCTION 171 return this->_InternalQueryInterface(iid,
ppvObject);
174 static HRESULT WINAPI CreateInstance(CComDebugObject<Base> **pp)
176 CComDebugObject<Base> *newInstance;
185 ATLTRY(newInstance =
new CComDebugObject<Base>());
186 if (newInstance !=
NULL)
188 newInstance->SetVoid(
NULL);
189 newInstance->InternalFinalConstructAddRef();
190 hResult = newInstance->_AtlInitialConstruct();
192 hResult = newInstance->FinalConstruct();
194 hResult = newInstance->_AtlFinalConstruct();
195 newInstance->InternalFinalConstructRelease();
207 #ifdef DEBUG_CCOMOBJECT 208 # define _CComObject CComDebugObject 210 # define _CComObject CComObject 214 void ReleaseCComPtrExpectZero(CComPtr<T>& cptr,
BOOL forceRelease =
FALSE)
218 int nrc = cptr->Release();
221 DbgPrint(
"WARNING: Unexpected RefCount > 0 (%d)!\n", nrc);
226 nrc = cptr->Release();
234 template<
class T,
class R>
246 hResult =
obj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
255 _CComObject<T> *pobj;
258 hResult = _CComObject<T>::CreateInstance(&pobj);
264 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
274 _CComObject<T> *pobj;
277 hResult = _CComObject<T>::CreateInstance(&pobj);
283 hResult = pobj->Initialize();
286 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
293 template<
class T,
class T1>
296 _CComObject<T> *pobj;
299 hResult = _CComObject<T>::CreateInstance(&pobj);
305 hResult = pobj->Initialize(initArg1);
308 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
315 template<
class T,
class T1,
class T2>
318 _CComObject<T> *pobj;
321 hResult = _CComObject<T>::CreateInstance(&pobj);
327 hResult = pobj->Initialize(initArg1, initArg2);
330 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
337 template<
class T,
class T1,
class T2,
class T3>
338 HRESULT inline ShellObjectCreatorInit(T1 initArg1, T2 initArg2, T3 initArg3,
REFIID riid,
void **
ppv)
340 _CComObject<T> *pobj;
343 hResult = _CComObject<T>::CreateInstance(&pobj);
349 hResult = pobj->Initialize(initArg1, initArg2, initArg3);
352 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
359 template<
class T,
class T1,
class T2,
class T3,
class T4>
360 HRESULT inline ShellObjectCreatorInit(T1 initArg1, T2 initArg2, T3 initArg3, T4 initArg4,
REFIID riid,
void **
ppv)
362 _CComObject<T> *pobj;
365 hResult = _CComObject<T>::CreateInstance(&pobj);
371 hResult = pobj->Initialize(initArg1, initArg2, initArg3, initArg4);
374 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
381 template<
class T,
class T1,
class T2,
class T3,
class T4,
class T5>
382 HRESULT inline ShellObjectCreatorInit(T1 initArg1, T2 initArg2, T3 initArg3, T4 initArg4, T5 initArg5,
REFIID riid,
void **
ppv)
384 _CComObject<T> *pobj;
387 hResult = _CComObject<T>::CreateInstance(&pobj);
393 hResult = pobj->Initialize(initArg1, initArg2, initArg3, initArg4, initArg5);
396 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
430 return SHSetStrRet(pStrRet,
Buffer);
484 int cb = pcidl->mkid.cb;
490 DbgPrint(
" - WARNING: cb is not a multiple of 4\n");
491 for (
i = 0; (
i + 4) <=
cb;
i += 4)
493 DbgPrint(
" - abID[%08x]: %02x %02x %02x %02x\n",
505 DbgPrint(
" - abID[%08x]: %02x %02x %02x --\n",
513 DbgPrint(
" - abID[%08x]: %02x %02x -- --\n",
520 DbgPrint(
" - abID[%08x]: %02x -- -- --\n",
532 #define S_LESSTHAN 0xffff 534 #define S_GREATERTHAN S_FALSE 535 #define MAKE_COMPARE_HRESULT(x) ((x)>0 ? S_GREATERTHAN : ((x)<0 ? S_LESSTHAN : S_EQUAL))
static HRESULT WINAPI CreateInstance(void *pv, REFIID riid, LPVOID *ppv)
#define DbgPrint(fmt,...)
GLuint GLuint GLsizei count
static HRESULT QueryInterface(REFIID, void **)
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
static ULONG Win32DbgPrint(const char *filename, int line, const char *lpFormat,...)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
GLsizei GLsizei GLuint * obj
#define sprintf(buf, format,...)
#define InterlockedCompareExchangePointer
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
REFIID LPVOID * ppvObject
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
#define CLASS_E_NOAGGREGATION
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
int __cdecl vsprintf(char *_Dest, const char *_Format, va_list _Args)
static ULONG WINAPI AddRef(IStream *iface)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
static HMODULE MODULEINFO DWORD cb
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
char * strcpy(char *DstString, const char *SrcString)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI SHIM_OBJ_NAME() OutputDebugStringA(LPCSTR lpOutputString)