* rshell.c
*/
+VOID InitRSHELL(VOID);
HRESULT WINAPI _CStartMenu_Constructor(REFIID riid, void **ppv);
HANDLE WINAPI _SHCreateDesktop(IShellDesktopTray *ShellDesk);
BOOL WINAPI _SHDesktopMessageLoop(HANDLE hDesktop);
DWORD WINAPI _WinList_Init(void);
void WINAPI _ShellDDEInit(BOOL bInit);
+HRESULT WINAPI _CBandSiteMenu_CreateInstance(REFIID riid, void **ppv);
+HRESULT WINAPI _CBandSite_CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv);
/*
* traywnd.c
#include "precomp.h"
-static HINSTANCE hRShell = NULL;
+static HINSTANCE ghRShell = NULL;
typedef HRESULT(WINAPI * PSTARTMENU_CONSTRUCTOR)(REFIID riid, void **ppv);
-HRESULT WINAPI _CStartMenu_Constructor(REFIID riid, void **ppv)
+VOID InitRSHELL(VOID)
{
- if (!hRShell)
- {
- hRShell = LoadLibraryW(L"rshell.dll");
- }
+ ghRShell = LoadLibraryW(L"rshell.dll");
+}
- if (hRShell)
+HRESULT WINAPI _CStartMenu_Constructor(REFIID riid, void **ppv)
+{
+ if (ghRShell)
{
- PSTARTMENU_CONSTRUCTOR func = (PSTARTMENU_CONSTRUCTOR)GetProcAddress(hRShell, "CStartMenu_Constructor");
+ PSTARTMENU_CONSTRUCTOR func = (PSTARTMENU_CONSTRUCTOR)GetProcAddress(ghRShell, "CStartMenu_Constructor");
if (func)
{
return func(riid, ppv);
NULL,
CLSCTX_INPROC_SERVER,
riid,
- ppv);
+ ppv);
}
typedef HANDLE(WINAPI * PSHCREATEDESKTOP)(IShellDesktopTray *ShellDesk);
{
HINSTANCE hFallback;
- if (!hRShell)
+ if (ghRShell)
{
- hRShell = LoadLibraryW(L"rshell.dll");
- }
-
- if (hRShell)
- {
- PSHCREATEDESKTOP func = (PSHCREATEDESKTOP)GetProcAddress(hRShell, "SHCreateDesktop");
+ PSHCREATEDESKTOP func = (PSHCREATEDESKTOP)GetProcAddress(ghRShell, "SHCreateDesktop");
if (func)
{
return func(ShellDesk);
{
HINSTANCE hFallback;
- if (!hRShell)
- {
- hRShell = LoadLibraryW(L"rshell.dll");
- }
-
- if (hRShell)
+ if (ghRShell)
{
- PSHDESKTOPMESSAGELOOP func = (PSHDESKTOPMESSAGELOOP)GetProcAddress(hRShell, "SHDesktopMessageLoop");
+ PSHDESKTOPMESSAGELOOP func = (PSHDESKTOPMESSAGELOOP)GetProcAddress(ghRShell, "SHDesktopMessageLoop");
if (func)
{
return func(hDesktop);
{
HINSTANCE hFallback;
- if (!hRShell)
- {
- hRShell = LoadLibraryW(L"rshell.dll");
- }
-
- if (hRShell)
+ if (ghRShell)
{
- PWINLIST_INIT func = (PWINLIST_INIT)GetProcAddress(hRShell, "WinList_Init");
+ PWINLIST_INIT func = (PWINLIST_INIT)GetProcAddress(ghRShell, "WinList_Init");
if (func)
{
return func();
{
HINSTANCE hFallback;
- if (!hRShell)
+ if (ghRShell)
{
- hRShell = LoadLibraryW(L"rshell.dll");
- }
-
- if (hRShell)
- {
- PSHELLDDEINIT func = (PSHELLDDEINIT)GetProcAddress(hRShell, "ShellDDEInit");
+ PSHELLDDEINIT func = (PSHELLDDEINIT)GetProcAddress(ghRShell, "ShellDDEInit");
if (func)
{
func(bInit);
}
}
}
+
+typedef HRESULT (WINAPI *CBANDSITEMENU_CREATEINSTANCE)(REFIID riid, void **ppv);
+HRESULT WINAPI _CBandSiteMenu_CreateInstance(REFIID riid, void **ppv)
+{
+ if (ghRShell)
+ {
+ CBANDSITEMENU_CREATEINSTANCE func = (CBANDSITEMENU_CREATEINSTANCE)GetProcAddress(ghRShell, "CBandSiteMenu_CreateInstance");
+ if (func)
+ {
+ return func(riid, ppv);
+ }
+ }
+
+ return CoCreateInstance(CLSID_BandSiteMenu,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ riid,
+ ppv);
+}
+
+typedef HRESULT (WINAPI *CBANDSITE_CREATEINSTANCE)(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv);
+HRESULT WINAPI _CBandSite_CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv)
+{
+ if (ghRShell)
+ {
+ CBANDSITE_CREATEINSTANCE func = (CBANDSITE_CREATEINSTANCE)GetProcAddress(ghRShell, "CBandSite_CreateInstance");
+ if (func)
+ {
+ return func(pUnkOuter, riid, ppv);
+ }
+ }
+
+ return CoCreateInstance(CLSID_RebarBandSite,
+ pUnkOuter,
+ CLSCTX_INPROC_SERVER,
+ riid,
+ ppv);
+}
+
IN UINT uFlags,
OUT IContextMenu **ppcm)
{
+ HRESULT hRet;
+
if (m_ContextMenu == NULL)
{
- HRESULT hRet;
- CComPtr<IShellService> pSs;
-
/* Cache the context menu so we don't need to CoCreateInstance all the time... */
- hRet = CoCreateInstance(CLSID_BandSiteMenu, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IShellService, &pSs));
- TRACE("CoCreateInstance(CLSID_BandSiteMenu) for IShellService returned: 0x%x\n", hRet);
- if (!SUCCEEDED(hRet))
- return hRet;
-
- hRet = pSs->SetOwner((IBandSite*)this);
- if (!SUCCEEDED(hRet))
- {
+ hRet = _CBandSiteMenu_CreateInstance(IID_PPV_ARG(IContextMenu, &m_ContextMenu));
+ if (FAILED_UNEXPECTEDLY(hRet))
return hRet;
- }
-
- hRet = pSs->QueryInterface(IID_PPV_ARG(IContextMenu, &m_ContextMenu));
- if (!SUCCEEDED(hRet))
+ hRet = IUnknown_SetOwner(m_ContextMenu, (IBandSite*)this);
+ if (FAILED_UNEXPECTEDLY(hRet))
return hRet;
}
}
/* Add the menu items */
- return m_ContextMenu->QueryContextMenu(hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
+ hRet = m_ContextMenu->QueryContextMenu(hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
+ if (FAILED_UNEXPECTEDLY(hRet))
+ return hRet;
+
+ return S_OK;
}
virtual HRESULT STDMETHODCALLTYPE Lock(IN BOOL bLock)
m_TaskBand = pTaskBand;
/* Create the RebarBandSite */
- hRet = CoCreateInstance(CLSID_RebarBandSite,
- static_cast<IBandSite*>(this),
- CLSCTX_INPROC_SERVER,
- IID_PPV_ARG(IUnknown, &m_Inner));
+ hRet = _CBandSite_CreateInstance(static_cast<IBandSite*>(this), IID_PPV_ARG(IUnknown, &m_Inner));
if (FAILED_UNEXPECTEDLY(hRet))
return hRet;