/*--------------------------------------------------------------------------*
 *
 *  Microsoft Windows
 *  Copyright (C) Microsoft Corporation, 1992 - 000
 *
 *  File:      extension.h
 *
 *  Contents:
 *
 *  History:   13-Mar-2000 jeffro    Created
 *
 *--------------------------------------------------------------------------*/

#pragma once

class CExtension :
    public CComObjectRoot
{
protected:
    enum ExtensionType
    {
        eExtType_Namespace,
        eExtType_ContextMenu,
        eExtType_PropertySheet,
        eExtType_Taskpad,
        eExtType_View,

        // must be last
        eExtType_Count,
		eExtType_First = eExtType_Namespace,
		eExtType_Last  = eExtType_View,
    };

protected:
    static HRESULT WINAPI UpdateRegistry (
		BOOL			bRegister,
		ExtensionType	eType,
		const CLSID&	clsidSnapIn,
		LPCWSTR			pszClassName,
		LPCWSTR			pszProgID,
		LPCWSTR			pszVersionIndependentProgID,
		LPCWSTR			pszExtendedNodeType);
};

#define DECLARE_EXTENSION_REGISTRATION(                           	\
	eType,															\
    clsid,                                                          \
    szClassName,                                                    \
    szProgID,                                                       \
    szVersionIndependentProgID,                                     \
    szExtendedNodeType)                                             \
public: static HRESULT WINAPI UpdateRegistry(BOOL bRegister)        \
{                                                                   \
    return (CExtension::UpdateRegistry (                            \
				bRegister,                                          \
				eType,                                              \
				clsid,                                              \
				OLESTR(szClassName),                                \
				OLESTR(szProgID),                                   \
				OLESTR(szVersionIndependentProgID),                 \
				OLESTR(szExtendedNodeType)));                       \
}