#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");
- if(func)
+ 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);
+}
+