windows-nt/Source/XPSP1/NT/shell/comctl32/v5/olestuff.cpp
2020-09-26 16:20:57 +08:00

63 lines
2 KiB
C++

// OLESTUFF.CPP
// Implementation of OLE delay-loaded stuff. This is needed for the
// classes defined in TBDROP.CPP and TABDROP.CPP.
// More OLE stuff could go here in the future.
// ==
// Technically this code is not C++ however, both files that call us
// are C++, and this is where we call for the C++ glue in crtfree.h.
// So for now this remains a .CPP file.
//
// History:
// 8/22/96 - t-mkim: created
//
#include "ctlspriv.h"
#include "olestuff.h"
// Allow C++ files to be linked in w/o error
#define CPP_FUNCTIONS
#include <crtfree.h>
#define OLELIBNAME TEXT ("OLE32.DLL")
// function pointers for GetProcAddress.
typedef HRESULT (STDAPICALLTYPE *LPFNCOINITIALIZE)(LPMALLOC pMalloc);
typedef void (STDAPICALLTYPE *LPFNCOUNINITIALIZE)(void);
typedef HRESULT (STDAPICALLTYPE *LPFNREGISTERDRAGDROP)(HWND hwnd, LPDROPTARGET pDropTarget);
typedef HRESULT (STDAPICALLTYPE *LPFNREVOKEDRAGDROP)(HWND hwnd);
HMODULE PrivLoadOleLibrary ()
{
// We call GetModuleHandle first so we don't map the library if we don't
// need to. We would like to avoid the overhead necessary to do so.
return GetModuleHandle(OLELIBNAME) ? LoadLibrary (OLELIBNAME) : NULL;
}
BOOL PrivFreeOleLibrary(HMODULE hmodOle)
{
return FreeLibrary(hmodOle);
}
HRESULT PrivCoInitialize (HMODULE hmodOle)
{
LPFNCOINITIALIZE pfnCoInitialize = (LPFNCOINITIALIZE) GetProcAddress (hmodOle, "CoInitialize");
return pfnCoInitialize (NULL);
}
void PrivCoUninitialize (HMODULE hmodOle)
{
LPFNCOUNINITIALIZE pfnCoUninitialize = (LPFNCOUNINITIALIZE) GetProcAddress (hmodOle, "CoUninitialize");
pfnCoUninitialize ();
}
HRESULT PrivRegisterDragDrop (HMODULE hmodOle, HWND hwnd, IDropTarget *pDropTarget)
{
LPFNREGISTERDRAGDROP pfnRegisterDragDrop = (LPFNREGISTERDRAGDROP) GetProcAddress (hmodOle, "RegisterDragDrop");
return pfnRegisterDragDrop(hwnd, pDropTarget);
}
HRESULT PrivRevokeDragDrop (HMODULE hmodOle, HWND hwnd)
{
LPFNREVOKEDRAGDROP pfnRevokeDragDrop = (LPFNREVOKEDRAGDROP) GetProcAddress (hmodOle, "RevokeDragDrop");
return pfnRevokeDragDrop (hwnd);
}