You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.0 KiB
119 lines
4.0 KiB
/***************************************************************************\
|
|
*
|
|
* File: ComManager.h
|
|
*
|
|
* Description:
|
|
* ComManager.h defines the process-wide COM manager used for all COM, OLE
|
|
* and Automation operations.
|
|
*
|
|
*
|
|
* History:
|
|
* 1/18/2000: JStall: Created
|
|
*
|
|
* Copyright (C) 2000 by Microsoft Corporation. All rights reserved.
|
|
*
|
|
\***************************************************************************/
|
|
|
|
|
|
#if !defined(SERVICES__ComManager_h__INCLUDED)
|
|
#define SERVICES__ComManager_h__INCLUDED
|
|
#pragma once
|
|
|
|
/***************************************************************************\
|
|
*
|
|
* class ComManager
|
|
*
|
|
* ComManager manages COM services including COM, OLE, and Automation. This
|
|
* class is designed to be "per-thread", automatically shared data across
|
|
* multiple threads.
|
|
*
|
|
* NOTE: This manager is delay-loads DLL's to manage performance and work on
|
|
* down-level platforms.
|
|
*
|
|
\***************************************************************************/
|
|
|
|
typedef HRESULT (WINAPI * CoInitializeExProc)(void * pvReserved, DWORD dwCoInit);
|
|
typedef void (WINAPI * CoUninitializeProc)();
|
|
typedef HRESULT (WINAPI * CoCreateInstanceProc)(REFCLSID rclsid, LPUNKNOWN punkOuter,
|
|
DWORD dwClsContext, REFIID ridd, LPVOID * ppv);
|
|
|
|
typedef HRESULT (WINAPI * OleInitializeProc)(LPVOID * pvReserved);
|
|
typedef void (WINAPI * OleUninitializeProc)();
|
|
typedef HRESULT (WINAPI * RegisterDragDropProc)(HWND hwnd, IDropTarget * pDropTarget);
|
|
typedef HRESULT (WINAPI * RevokeDragDropProc)(HWND hwnd);
|
|
typedef void (WINAPI * ReleaseStgMediumProc)(STGMEDIUM * pstg);
|
|
|
|
typedef BSTR (WINAPI * SysAllocStringProc)(const OLECHAR * psz);
|
|
typedef HRESULT (WINAPI * SysFreeStringProc)(BSTR bstr);
|
|
typedef HRESULT (WINAPI * VariantInitProc)(VARIANTARG * pvarg);
|
|
typedef HRESULT (WINAPI * VariantClearProc)(VARIANTARG * pvarg);
|
|
|
|
class ComManager
|
|
{
|
|
// Construction
|
|
public:
|
|
ComManager();
|
|
~ComManager();
|
|
|
|
// Operations
|
|
public:
|
|
enum EServices
|
|
{
|
|
sCOM = 0x00000001, // COM
|
|
sAuto = 0x00000002, // OLE-Automation
|
|
sOLE = 0x00000004, // OLE2
|
|
};
|
|
|
|
BOOL Init(UINT nMask);
|
|
|
|
BOOL IsInit(UINT nMask) const;
|
|
|
|
HRESULT CreateInstance(REFCLSID rclsid, IUnknown * punkOuter, REFIID riid, void ** ppv);
|
|
|
|
BSTR SysAllocString(const OLECHAR * psz);
|
|
HRESULT SysFreeString(BSTR bstr);
|
|
HRESULT VariantInit(VARIANTARG * pvarg);
|
|
HRESULT VariantClear(VARIANTARG * pvarg);
|
|
|
|
HRESULT RegisterDragDrop(HWND hwnd, IDropTarget * pDropTarget);
|
|
HRESULT RevokeDragDrop(HWND hwnd);
|
|
void ReleaseStgMedium(STGMEDIUM * pstg);
|
|
|
|
// Data
|
|
protected:
|
|
//
|
|
// Shared data that is process wide- only need to load the DLL's once.
|
|
//
|
|
|
|
static int s_cRefs;
|
|
static CritLock s_lock;
|
|
|
|
static HINSTANCE s_hDllCOM; // Core "COM" / OLE
|
|
static CoInitializeExProc s_pfnCoInit;
|
|
static CoUninitializeProc s_pfnCoUninit;
|
|
static CoCreateInstanceProc s_pfnCreate;
|
|
static OleInitializeProc s_pfnOleInit;
|
|
static OleUninitializeProc s_pfnOleUninit;
|
|
static RegisterDragDropProc s_pfnRegisterDragDrop;
|
|
static RevokeDragDropProc s_pfnRevokeDragDrop;
|
|
static ReleaseStgMediumProc s_pfnReleaseStgMedium;
|
|
|
|
static HINSTANCE s_hDllAuto; // OLE-automation
|
|
static SysAllocStringProc s_pfnAllocString;
|
|
static SysFreeStringProc s_pfnFreeString;
|
|
static VariantInitProc s_pfnVariantInit;
|
|
static VariantClearProc s_pfnVariantClear;
|
|
|
|
|
|
//
|
|
// Specific data that is "per-thread"- need to initialize COM / OLE on each
|
|
// thread.
|
|
//
|
|
|
|
BOOL m_fInitCOM:1;
|
|
BOOL m_fInitOLE:1;
|
|
};
|
|
|
|
#include "ComManager.inl"
|
|
|
|
#endif // SERVICES__ComManager_h__INCLUDED
|