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) 82 #define FAILED_UNEXPECTEDLY(hr) _ROS_FAILED_HELPER((hr), #hr, __FILE__, __LINE__) 84 #define FAILED_UNEXPECTEDLY(hr) FAILED(hr) 93 class CComCreatorCentralInstance
112 static_cast<IUnknown *>(pObj)->Release();
126 template <
typename T>
127 IUnknown *CComCreatorCentralInstance<T>::s_pInstance =
NULL;
129 #define DECLARE_CENTRAL_INSTANCE_NOT_AGGREGATABLE(x) \ 131 typedef CComCreatorCentralInstance< ATL::CComObject<x> > _CreatorClass; 135 template <
class Base>
136 class CComDebugObject :
public Base 139 CComDebugObject(
void * =
NULL)
141 #if DEBUG_CCOMOBJECT_CREATION 147 virtual ~CComDebugObject()
149 this->FinalRelease();
150 _pAtlModule->Unlock();
155 int rc = this->InternalAddRef();
156 #if DEBUG_CCOMOBJECT_REFCOUNTING 164 int rc = this->InternalRelease();
166 #if DEBUG_CCOMOBJECT_REFCOUNTING 172 #if DEBUG_CCOMOBJECT_DESTRUCTION 182 return this->_InternalQueryInterface(iid,
ppvObject);
185 static HRESULT WINAPI CreateInstance(CComDebugObject<Base> **pp)
187 CComDebugObject<Base> *newInstance;
196 ATLTRY(newInstance =
new CComDebugObject<Base>());
197 if (newInstance !=
NULL)
199 newInstance->SetVoid(
NULL);
200 newInstance->InternalFinalConstructAddRef();
201 hResult = newInstance->_AtlInitialConstruct();
203 hResult = newInstance->FinalConstruct();
205 hResult = newInstance->_AtlFinalConstruct();
206 newInstance->InternalFinalConstructRelease();
218 #ifdef DEBUG_CCOMOBJECT 219 # define _CComObject CComDebugObject 221 # define _CComObject CComObject 225 void ReleaseCComPtrExpectZero(CComPtr<T>& cptr,
BOOL forceRelease =
FALSE)
229 int nrc = cptr->Release();
232 DbgPrint(
"WARNING: Unexpected RefCount > 0 (%d)!\n", nrc);
237 nrc = cptr->Release();
245 template<
class T,
class R>
257 hResult =
obj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
266 _CComObject<T> *pobj;
269 hResult = _CComObject<T>::CreateInstance(&pobj);
275 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
285 _CComObject<T> *pobj;
288 hResult = _CComObject<T>::CreateInstance(&pobj);
294 hResult = pobj->Initialize();
297 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
304 template<
class T,
class T1>
307 _CComObject<T> *pobj;
310 hResult = _CComObject<T>::CreateInstance(&pobj);
316 hResult = pobj->Initialize(initArg1);
319 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
326 template<
class T,
class T1,
class T2>
329 _CComObject<T> *pobj;
332 hResult = _CComObject<T>::CreateInstance(&pobj);
338 hResult = pobj->Initialize(initArg1, initArg2);
341 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
348 template<
class T,
class T1,
class T2,
class T3>
349 HRESULT inline ShellObjectCreatorInit(T1 initArg1, T2 initArg2, T3 initArg3,
REFIID riid,
void **
ppv)
351 _CComObject<T> *pobj;
354 hResult = _CComObject<T>::CreateInstance(&pobj);
360 hResult = pobj->Initialize(initArg1, initArg2, initArg3);
363 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
370 template<
class T,
class T1,
class T2,
class T3,
class T4>
371 HRESULT inline ShellObjectCreatorInit(T1 initArg1, T2 initArg2, T3 initArg3, T4 initArg4,
REFIID riid,
void **
ppv)
373 _CComObject<T> *pobj;
376 hResult = _CComObject<T>::CreateInstance(&pobj);
382 hResult = pobj->Initialize(initArg1, initArg2, initArg3, initArg4);
385 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
392 template<
class T,
class T1,
class T2,
class T3,
class T4,
class T5>
393 HRESULT inline ShellObjectCreatorInit(T1 initArg1, T2 initArg2, T3 initArg3, T4 initArg4, T5 initArg5,
REFIID riid,
void **
ppv)
395 _CComObject<T> *pobj;
398 hResult = _CComObject<T>::CreateInstance(&pobj);
404 hResult = pobj->Initialize(initArg1, initArg2, initArg3, initArg4, initArg5);
407 hResult = pobj->QueryInterface(
riid, reinterpret_cast<void **>(
ppv));
441 return SHSetStrRet(pStrRet,
Buffer);
495 int cb = pcidl->mkid.cb;
501 DbgPrint(
" - WARNING: cb is not a multiple of 4\n");
502 for (
i = 0; (
i + 4) <=
cb;
i += 4)
504 DbgPrint(
" - abID[%08x]: %02x %02x %02x %02x\n",
516 DbgPrint(
" - abID[%08x]: %02x %02x %02x --\n",
524 DbgPrint(
" - abID[%08x]: %02x %02x -- --\n",
531 DbgPrint(
" - abID[%08x]: %02x -- -- --\n",
543 #define S_LESSTHAN 0xffff 545 #define S_GREATERTHAN S_FALSE 546 #define MAKE_COMPARE_HRESULT(x) ((x)>0 ? S_GREATERTHAN : ((x)<0 ? S_LESSTHAN : S_EQUAL)) 565 struct CDataObjectHIDA
576 m_medium.tymed = TYMED_NULL;
578 if (g_cfHIDA ==
NULL)
582 FORMATETC
fmt = { g_cfHIDA,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
587 m_medium.tymed = TYMED_NULL;
592 if (m_cida ==
nullptr)
611 operator bool()
const 613 return m_cida !=
nullptr;
616 operator const CIDA* ()
const 621 const CIDA* operator->()
const 630 FORMATETC
fmt = { clipformat,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
631 STGMEDIUM medium = { TYMED_NULL };
640 if (
size <= dwBufferSize)
664 STGMEDIUM medium = { TYMED_HGLOBAL };
677 FORMATETC etc = { clipformat,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
static HRESULT WINAPI CreateInstance(void *pv, REFIID riid, LPVOID *ppv)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
#define DbgPrint(fmt,...)
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
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)
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
#define DECLSPEC_SELECTANY
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
#define STG_E_INVALIDHANDLE
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,...)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
#define InterlockedCompareExchangePointer
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
static const WCHAR CFSTR_SHELLIDLISTW[]
HRESULT SetData([in, unique] FORMATETC *pformatetc, [in, unique] STGMEDIUM *pmedium, [in] BOOL fRelease)
BOOL _ROS_FAILED_HELPER(HRESULT hr, const char *expr, const char *filename, int line)
typedef bool(CARDLIBPROC *pCanDragProc)(CardRegion &stackobj
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
static HRESULT WINAPI DataObject_SetData(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
static HRESULT WINAPI DataObject_GetData(LPDATAOBJECT iface, LPFORMATETC pformatetcIn, STGMEDIUM *pmedium)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
REFIID LPVOID * ppvObject
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
#define CLASS_E_NOAGGREGATION
ULONG Win32DbgPrint(const char *filename, int line, const char *lpFormat,...)
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)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
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)