|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 2000
//
// File: classreg.h
//
// History: 02-02-2000 Vivekj Added
//--------------------------------------------------------------------------
#pragma once
#ifndef _CLASSREG_H_
#define _CLASSREG_H_
#include "tstring.h"
#include "modulepath.h"
/*+-------------------------------------------------------------------------*
* AddReplacementTrace * * Trace helper function. *--------------------------------------------------------------------------*/
#ifdef DBG
inline void AddReplacementTrace (std::wstring& str, LPCWSTR pszKey, LPCWSTR pszData) { if (!str.empty()) str += L"\n";
str += pszKey; str += L" -> "; str += pszData; }
#else
#define AddReplacementTrace(str, pszKey, pszData)
#endif // DBG
/*+-------------------------------------------------------------------------*
* InlineT2W * * Helper function to aid in converting tstrings during initialization * of constant members. *--------------------------------------------------------------------------*/
inline std::wstring InlineT2W (const tstring& str) { #if defined(_UNICODE)
return str; #else
USES_CONVERSION; return A2CW(str.c_str()); #endif
}
/*+-------------------------------------------------------------------------*
* CObjectRegParams * * Parameters register all objects. *--------------------------------------------------------------------------*/
class CObjectRegParams { public: CObjectRegParams ( const CLSID& clsid, // CLSID of object
LPCTSTR pszModuleName, // name of implementing DLL
LPCTSTR pszClassName, // class name of object
LPCTSTR pszProgID, // ProgID of object
LPCTSTR pszVersionIndependentProgID, // version-independent ProgID of object
LPCTSTR pszServerType = _T("InprocServer32")) // server type
: m_clsid (clsid), m_strModuleName (InlineT2W (pszModuleName) ), m_strModulePath (InlineT2W ((LPCTSTR)CModulePath::MakeAbsoluteModulePath(pszModuleName))), m_strClassName (InlineT2W (pszClassName)), m_strProgID (InlineT2W (pszProgID)), m_strVersionIndependentProgID (InlineT2W (pszVersionIndependentProgID)), m_strServerType (InlineT2W (pszServerType)) { }
const CLSID m_clsid; // CLSID of object
const std::wstring m_strModuleName; // name of implementing DLL
const std::wstring m_strModulePath; // absolute module path
const std::wstring m_strClassName; // class name of object
const std::wstring m_strProgID; // ProgID of object
const std::wstring m_strVersionIndependentProgID; // version-independent ProgID of object
const std::wstring m_strServerType; // server type local/in-proc, etc.
};
/*+-------------------------------------------------------------------------*
* CControlRegParams * * Parameters required to register all controls, in addition to * CObjectRegParams. *--------------------------------------------------------------------------*/
class CControlRegParams { public: CControlRegParams ( const GUID& libid, // LIBID of control's typelib
LPCTSTR pszToolboxBitmapID, // index of control's bitmap
LPCTSTR pszVersion) // control's version
: m_libid (libid), m_strToolboxBitmapID (InlineT2W (pszToolboxBitmapID)), m_strVersion (InlineT2W (pszVersion)) { }
const GUID m_libid; // LIBID of control's typelib
const std::wstring m_strToolboxBitmapID; // index of control's bitmap
const std::wstring m_strVersion; // control's version
};
/*+-------------------------------------------------------------------------*
* MMCUpdateRegistry * * Registers a COM object or control. This function typically isn't used * directly, but indirectly via DECLARE_MMC_OBJECT_REGISTRATION or * DECLARE_MMC_CONTROL_REGISTRATION. *--------------------------------------------------------------------------*/
MMCBASE_API HRESULT WINAPI MMCUpdateRegistry ( BOOL bRegister, // I:register or unregister?
const CObjectRegParams* pObjParams, // I:object registration parameters
const CControlRegParams* pCtlParams); // I:control registration parameters (optional)
/*+-------------------------------------------------------------------------*
* DECLARE_MMC_OBJECT_REGISTRATION * * Declares a registration function for a COM object. *--------------------------------------------------------------------------*/
#define DECLARE_MMC_OBJECT_REGISTRATION( \
szModule, \ clsid, \ szClassName, \ szProgID, \ szVersionIndependentProgID) \ static HRESULT WINAPI UpdateRegistry(BOOL bRegister) \ { \ CObjectRegParams op ( \ clsid, \ szModule, \ szClassName, \ szProgID, \ szVersionIndependentProgID); \ \ return (MMCUpdateRegistry (bRegister, &op, NULL)); \ }
/*+-------------------------------------------------------------------------*
* DECLARE_MMC_CONTROL_REGISTRATION * * Declares a registration function for a COM control. *--------------------------------------------------------------------------*/
#define DECLARE_MMC_CONTROL_REGISTRATION( \
szModule, \ clsid, \ szClassName, \ szProgID, \ szVersionIndependentProgID, \ libid, \ szBitmapID, \ szVersion) \ static HRESULT WINAPI UpdateRegistry(BOOL bRegister) \ { \ CObjectRegParams op ( \ clsid, \ szModule, \ szClassName, \ szProgID, \ szVersionIndependentProgID); \ \ CControlRegParams cp ( \ libid, \ szBitmapID, \ szVersion); \ \ return (MMCUpdateRegistry (bRegister, &op, &cp)); \ }
#endif // _CLASSREG_H_
|