/*** Autogenerated by WIDL 0.1 from comcat.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_COMCAT_H
#define __WIDL_COMCAT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <unknwn.h>
typedef GUID CATID;

typedef REFGUID REFCATID;

#define CATID_NULL GUID_NULL
#define IsEqualCATID(rcatid1, rcatid2) IsEqualGUID(rcatid1, rcatid2)
#define IEnumCATID IEnumGUID
#define IID_IEnumCATID IID_IEnumGUID
#define LPENUMCATID LPENUMGUID
#define IEnumCLSID IEnumGUID
#define IID_IEnumCLSID IID_IEnumGUID
#define LPENUMCLSID LPENUMGUID
#ifndef __IEnumGUID_FWD_DEFINED__
#define __IEnumGUID_FWD_DEFINED__
typedef struct IEnumGUID IEnumGUID;
#endif

typedef IEnumGUID *LPENUMGUID;

/*****************************************************************************
 * IEnumGUID interface
 */
#ifndef __IEnumGUID_INTERFACE_DEFINED__
#define __IEnumGUID_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumGUID, 0x0002e000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumGUID : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        GUID* rgelt,
        ULONG* pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumGUID** ppenum) = 0;

};
#else
typedef struct IEnumGUIDVtbl IEnumGUIDVtbl;
struct IEnumGUID {
    const IEnumGUIDVtbl* lpVtbl;
};
struct IEnumGUIDVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumGUID* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumGUID* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumGUID* This);

    /*** IEnumGUID methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumGUID* This,
        ULONG celt,
        GUID* rgelt,
        ULONG* pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumGUID* This,
        ULONG celt);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumGUID* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumGUID* This,
        IEnumGUID** ppenum);

};

/*** IUnknown methods ***/
#define IEnumGUID_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumGUID_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumGUID_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumGUID methods ***/
#define IEnumGUID_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumGUID_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumGUID_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumGUID_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

#define IEnumGUID_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IEnumGUID methods ***/ \
    STDMETHOD_(HRESULT,Next)(THIS_ ULONG celt, GUID* rgelt, ULONG* pceltFetched) PURE; \
    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG celt) PURE; \
    STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumGUID** ppenum) PURE;

HRESULT CALLBACK IEnumGUID_Next_Proxy(
    IEnumGUID* This,
    ULONG celt,
    GUID* rgelt,
    ULONG* pceltFetched);
void __RPC_STUB IEnumGUID_Next_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumGUID_Skip_Proxy(
    IEnumGUID* This,
    ULONG celt);
void __RPC_STUB IEnumGUID_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumGUID_Reset_Proxy(
    IEnumGUID* This);
void __RPC_STUB IEnumGUID_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumGUID_Clone_Proxy(
    IEnumGUID* This,
    IEnumGUID** ppenum);
void __RPC_STUB IEnumGUID_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumGUID_INTERFACE_DEFINED__ */

#ifndef __IEnumCATEGORYINFO_FWD_DEFINED__
#define __IEnumCATEGORYINFO_FWD_DEFINED__
typedef struct IEnumCATEGORYINFO IEnumCATEGORYINFO;
#endif

typedef IEnumCATEGORYINFO *LPENUMCATEGORYINFO;

typedef struct tagCATEGORYINFO {
    CATID catid;
    LCID lcid;
    OLECHAR szDescription[128];
} CATEGORYINFO, *LPCATEGORYINFO;

/*****************************************************************************
 * IEnumCATEGORYINFO interface
 */
#ifndef __IEnumCATEGORYINFO_INTERFACE_DEFINED__
#define __IEnumCATEGORYINFO_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumCATEGORYINFO, 0x0002e011, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumCATEGORYINFO : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        CATEGORYINFO* rgelt,
        ULONG* pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumCATEGORYINFO** ppenum) = 0;

};
#else
typedef struct IEnumCATEGORYINFOVtbl IEnumCATEGORYINFOVtbl;
struct IEnumCATEGORYINFO {
    const IEnumCATEGORYINFOVtbl* lpVtbl;
};
struct IEnumCATEGORYINFOVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumCATEGORYINFO* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumCATEGORYINFO* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumCATEGORYINFO* This);

    /*** IEnumCATEGORYINFO methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumCATEGORYINFO* This,
        ULONG celt,
        CATEGORYINFO* rgelt,
        ULONG* pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumCATEGORYINFO* This,
        ULONG celt);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumCATEGORYINFO* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumCATEGORYINFO* This,
        IEnumCATEGORYINFO** ppenum);

};

/*** IUnknown methods ***/
#define IEnumCATEGORYINFO_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumCATEGORYINFO_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumCATEGORYINFO_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumCATEGORYINFO methods ***/
#define IEnumCATEGORYINFO_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumCATEGORYINFO_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumCATEGORYINFO_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumCATEGORYINFO_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

#define IEnumCATEGORYINFO_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IEnumCATEGORYINFO methods ***/ \
    STDMETHOD_(HRESULT,Next)(THIS_ ULONG celt, CATEGORYINFO* rgelt, ULONG* pceltFetched) PURE; \
    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG celt) PURE; \
    STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumCATEGORYINFO** ppenum) PURE;

HRESULT CALLBACK IEnumCATEGORYINFO_Next_Proxy(
    IEnumCATEGORYINFO* This,
    ULONG celt,
    CATEGORYINFO* rgelt,
    ULONG* pceltFetched);
void __RPC_STUB IEnumCATEGORYINFO_Next_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumCATEGORYINFO_Skip_Proxy(
    IEnumCATEGORYINFO* This,
    ULONG celt);
void __RPC_STUB IEnumCATEGORYINFO_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumCATEGORYINFO_Reset_Proxy(
    IEnumCATEGORYINFO* This);
void __RPC_STUB IEnumCATEGORYINFO_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumCATEGORYINFO_Clone_Proxy(
    IEnumCATEGORYINFO* This,
    IEnumCATEGORYINFO** ppenum);
void __RPC_STUB IEnumCATEGORYINFO_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumCATEGORYINFO_INTERFACE_DEFINED__ */

#ifndef __ICatInformation_FWD_DEFINED__
#define __ICatInformation_FWD_DEFINED__
typedef struct ICatInformation ICatInformation;
#endif

typedef ICatInformation *LPCATINFORMATION;

/*****************************************************************************
 * ICatInformation interface
 */
#ifndef __ICatInformation_INTERFACE_DEFINED__
#define __ICatInformation_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICatInformation, 0x0002e013, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICatInformation : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE EnumCategories(
        LCID lcid,
        IEnumCATEGORYINFO** ppenumCategoryInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCategoryDesc(
        REFCATID rcatid,
        LCID lcid,
        LPWSTR* pszDesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumClassesOfCategories(
        ULONG cImplemented,
        CATID rgcatidImpl[],
        ULONG cRequired,
        CATID rgcatidReq[],
        IEnumGUID** ppenumClsid) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsClassOfCategories(
        REFCLSID rclsid,
        ULONG cImplemented,
        CATID rgcatidImpl[],
        ULONG cRequired,
        CATID rgcatidReq[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumImplCategoriesOfClass(
        REFCLSID rclsid,
        IEnumGUID** ppenumCatid) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumReqCategoriesOfClass(
        REFCLSID rclsid,
        IEnumGUID** ppenumCatid) = 0;

};
#else
typedef struct ICatInformationVtbl ICatInformationVtbl;
struct ICatInformation {
    const ICatInformationVtbl* lpVtbl;
};
struct ICatInformationVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICatInformation* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICatInformation* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICatInformation* This);

    /*** ICatInformation methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumCategories)(
        ICatInformation* This,
        LCID lcid,
        IEnumCATEGORYINFO** ppenumCategoryInfo);

    HRESULT (STDMETHODCALLTYPE *GetCategoryDesc)(
        ICatInformation* This,
        REFCATID rcatid,
        LCID lcid,
        LPWSTR* pszDesc);

    HRESULT (STDMETHODCALLTYPE *EnumClassesOfCategories)(
        ICatInformation* This,
        ULONG cImplemented,
        CATID rgcatidImpl[],
        ULONG cRequired,
        CATID rgcatidReq[],
        IEnumGUID** ppenumClsid);

    HRESULT (STDMETHODCALLTYPE *IsClassOfCategories)(
        ICatInformation* This,
        REFCLSID rclsid,
        ULONG cImplemented,
        CATID rgcatidImpl[],
        ULONG cRequired,
        CATID rgcatidReq[]);

    HRESULT (STDMETHODCALLTYPE *EnumImplCategoriesOfClass)(
        ICatInformation* This,
        REFCLSID rclsid,
        IEnumGUID** ppenumCatid);

    HRESULT (STDMETHODCALLTYPE *EnumReqCategoriesOfClass)(
        ICatInformation* This,
        REFCLSID rclsid,
        IEnumGUID** ppenumCatid);

};

/*** IUnknown methods ***/
#define ICatInformation_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICatInformation_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICatInformation_Release(p) (p)->lpVtbl->Release(p)
/*** ICatInformation methods ***/
#define ICatInformation_EnumCategories(p,a,b) (p)->lpVtbl->EnumCategories(p,a,b)
#define ICatInformation_GetCategoryDesc(p,a,b,c) (p)->lpVtbl->GetCategoryDesc(p,a,b,c)
#define ICatInformation_EnumClassesOfCategories(p,a,b,c,d,e) (p)->lpVtbl->EnumClassesOfCategories(p,a,b,c,d,e)
#define ICatInformation_IsClassOfCategories(p,a,b,c,d,e) (p)->lpVtbl->IsClassOfCategories(p,a,b,c,d,e)
#define ICatInformation_EnumImplCategoriesOfClass(p,a,b) (p)->lpVtbl->EnumImplCategoriesOfClass(p,a,b)
#define ICatInformation_EnumReqCategoriesOfClass(p,a,b) (p)->lpVtbl->EnumReqCategoriesOfClass(p,a,b)

#endif

#define ICatInformation_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** ICatInformation methods ***/ \
    STDMETHOD_(HRESULT,EnumCategories)(THIS_ LCID lcid, IEnumCATEGORYINFO** ppenumCategoryInfo) PURE; \
    STDMETHOD_(HRESULT,GetCategoryDesc)(THIS_ REFCATID rcatid, LCID lcid, LPWSTR* pszDesc) PURE; \
    STDMETHOD_(HRESULT,EnumClassesOfCategories)(THIS_ ULONG cImplemented, CATID rgcatidImpl[], ULONG cRequired, CATID rgcatidReq[], IEnumGUID** ppenumClsid) PURE; \
    STDMETHOD_(HRESULT,IsClassOfCategories)(THIS_ REFCLSID rclsid, ULONG cImplemented, CATID rgcatidImpl[], ULONG cRequired, CATID rgcatidReq[]) PURE; \
    STDMETHOD_(HRESULT,EnumImplCategoriesOfClass)(THIS_ REFCLSID rclsid, IEnumGUID** ppenumCatid) PURE; \
    STDMETHOD_(HRESULT,EnumReqCategoriesOfClass)(THIS_ REFCLSID rclsid, IEnumGUID** ppenumCatid) PURE;

HRESULT CALLBACK ICatInformation_EnumCategories_Proxy(
    ICatInformation* This,
    LCID lcid,
    IEnumCATEGORYINFO** ppenumCategoryInfo);
void __RPC_STUB ICatInformation_EnumCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatInformation_GetCategoryDesc_Proxy(
    ICatInformation* This,
    REFCATID rcatid,
    LCID lcid,
    LPWSTR* pszDesc);
void __RPC_STUB ICatInformation_GetCategoryDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatInformation_RemoteEnumClassesOfCategories_Proxy(
    ICatInformation* This,
    ULONG cImplemented,
    CATID rgcatidImpl[],
    ULONG cRequired,
    CATID rgcatidReq[],
    IEnumGUID** ppenumClsid);
void __RPC_STUB ICatInformation_RemoteEnumClassesOfCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatInformation_EnumClassesOfCategories_Proxy(
    ICatInformation* This,
    ULONG cImplemented,
    CATID rgcatidImpl[],
    ULONG cRequired,
    CATID rgcatidReq[],
    IEnumGUID** ppenumClsid);
HRESULT __RPC_STUB ICatInformation_EnumClassesOfCategories_Stub(
    ICatInformation* This,
    ULONG cImplemented,
    CATID rgcatidImpl[],
    ULONG cRequired,
    CATID rgcatidReq[],
    IEnumGUID** ppenumClsid);
HRESULT CALLBACK ICatInformation_RemoteIsClassOfCategories_Proxy(
    ICatInformation* This,
    REFCLSID rclsid,
    ULONG cImplemented,
    CATID rgcatidImpl[],
    ULONG cRequired,
    CATID rgcatidReq[]);
void __RPC_STUB ICatInformation_RemoteIsClassOfCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatInformation_IsClassOfCategories_Proxy(
    ICatInformation* This,
    REFCLSID rclsid,
    ULONG cImplemented,
    CATID rgcatidImpl[],
    ULONG cRequired,
    CATID rgcatidReq[]);
HRESULT __RPC_STUB ICatInformation_IsClassOfCategories_Stub(
    ICatInformation* This,
    REFCLSID rclsid,
    ULONG cImplemented,
    CATID rgcatidImpl[],
    ULONG cRequired,
    CATID rgcatidReq[]);
HRESULT CALLBACK ICatInformation_EnumImplCategoriesOfClass_Proxy(
    ICatInformation* This,
    REFCLSID rclsid,
    IEnumGUID** ppenumCatid);
void __RPC_STUB ICatInformation_EnumImplCategoriesOfClass_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatInformation_EnumReqCategoriesOfClass_Proxy(
    ICatInformation* This,
    REFCLSID rclsid,
    IEnumGUID** ppenumCatid);
void __RPC_STUB ICatInformation_EnumReqCategoriesOfClass_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICatInformation_INTERFACE_DEFINED__ */

#ifndef __ICatRegister_FWD_DEFINED__
#define __ICatRegister_FWD_DEFINED__
typedef struct ICatRegister ICatRegister;
#endif

typedef ICatRegister *LPCATREGISTER;

/*****************************************************************************
 * ICatRegister interface
 */
#ifndef __ICatRegister_INTERFACE_DEFINED__
#define __ICatRegister_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICatRegister, 0x0002e012, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICatRegister : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterCategories(
        ULONG cCategories,
        CATEGORYINFO rgCategoryInfo[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnRegisterCategories(
        ULONG cCategories,
        CATID rgcatid[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterClassImplCategories(
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnRegisterClassImplCategories(
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterClassReqCategories(
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnRegisterClassReqCategories(
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]) = 0;

};
#else
typedef struct ICatRegisterVtbl ICatRegisterVtbl;
struct ICatRegister {
    const ICatRegisterVtbl* lpVtbl;
};
struct ICatRegisterVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICatRegister* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICatRegister* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICatRegister* This);

    /*** ICatRegister methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterCategories)(
        ICatRegister* This,
        ULONG cCategories,
        CATEGORYINFO rgCategoryInfo[]);

    HRESULT (STDMETHODCALLTYPE *UnRegisterCategories)(
        ICatRegister* This,
        ULONG cCategories,
        CATID rgcatid[]);

    HRESULT (STDMETHODCALLTYPE *RegisterClassImplCategories)(
        ICatRegister* This,
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]);

    HRESULT (STDMETHODCALLTYPE *UnRegisterClassImplCategories)(
        ICatRegister* This,
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]);

    HRESULT (STDMETHODCALLTYPE *RegisterClassReqCategories)(
        ICatRegister* This,
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]);

    HRESULT (STDMETHODCALLTYPE *UnRegisterClassReqCategories)(
        ICatRegister* This,
        REFCLSID rclsid,
        ULONG cCategories,
        CATID rgcatid[]);

};

/*** IUnknown methods ***/
#define ICatRegister_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICatRegister_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICatRegister_Release(p) (p)->lpVtbl->Release(p)
/*** ICatRegister methods ***/
#define ICatRegister_RegisterCategories(p,a,b) (p)->lpVtbl->RegisterCategories(p,a,b)
#define ICatRegister_UnRegisterCategories(p,a,b) (p)->lpVtbl->UnRegisterCategories(p,a,b)
#define ICatRegister_RegisterClassImplCategories(p,a,b,c) (p)->lpVtbl->RegisterClassImplCategories(p,a,b,c)
#define ICatRegister_UnRegisterClassImplCategories(p,a,b,c) (p)->lpVtbl->UnRegisterClassImplCategories(p,a,b,c)
#define ICatRegister_RegisterClassReqCategories(p,a,b,c) (p)->lpVtbl->RegisterClassReqCategories(p,a,b,c)
#define ICatRegister_UnRegisterClassReqCategories(p,a,b,c) (p)->lpVtbl->UnRegisterClassReqCategories(p,a,b,c)

#endif

#define ICatRegister_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** ICatRegister methods ***/ \
    STDMETHOD_(HRESULT,RegisterCategories)(THIS_ ULONG cCategories, CATEGORYINFO rgCategoryInfo[]) PURE; \
    STDMETHOD_(HRESULT,UnRegisterCategories)(THIS_ ULONG cCategories, CATID rgcatid[]) PURE; \
    STDMETHOD_(HRESULT,RegisterClassImplCategories)(THIS_ REFCLSID rclsid, ULONG cCategories, CATID rgcatid[]) PURE; \
    STDMETHOD_(HRESULT,UnRegisterClassImplCategories)(THIS_ REFCLSID rclsid, ULONG cCategories, CATID rgcatid[]) PURE; \
    STDMETHOD_(HRESULT,RegisterClassReqCategories)(THIS_ REFCLSID rclsid, ULONG cCategories, CATID rgcatid[]) PURE; \
    STDMETHOD_(HRESULT,UnRegisterClassReqCategories)(THIS_ REFCLSID rclsid, ULONG cCategories, CATID rgcatid[]) PURE;

HRESULT CALLBACK ICatRegister_RegisterCategories_Proxy(
    ICatRegister* This,
    ULONG cCategories,
    CATEGORYINFO rgCategoryInfo[]);
void __RPC_STUB ICatRegister_RegisterCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatRegister_UnRegisterCategories_Proxy(
    ICatRegister* This,
    ULONG cCategories,
    CATID rgcatid[]);
void __RPC_STUB ICatRegister_UnRegisterCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatRegister_RegisterClassImplCategories_Proxy(
    ICatRegister* This,
    REFCLSID rclsid,
    ULONG cCategories,
    CATID rgcatid[]);
void __RPC_STUB ICatRegister_RegisterClassImplCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatRegister_UnRegisterClassImplCategories_Proxy(
    ICatRegister* This,
    REFCLSID rclsid,
    ULONG cCategories,
    CATID rgcatid[]);
void __RPC_STUB ICatRegister_UnRegisterClassImplCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatRegister_RegisterClassReqCategories_Proxy(
    ICatRegister* This,
    REFCLSID rclsid,
    ULONG cCategories,
    CATID rgcatid[]);
void __RPC_STUB ICatRegister_RegisterClassReqCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICatRegister_UnRegisterClassReqCategories_Proxy(
    ICatRegister* This,
    REFCLSID rclsid,
    ULONG cCategories,
    CATID rgcatid[]);
void __RPC_STUB ICatRegister_UnRegisterClassReqCategories_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICatRegister_INTERFACE_DEFINED__ */

DEFINE_GUID( CATID_Insertable, 0x40fc6ed3, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_Control, 0x40fc6ed4, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_Programmable, 0x40fc6ed5, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_IsShortcut, 0x40fc6ed6, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_NeverShowExt, 0x40fc6ed7, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_DocObject, 0x40fc6ed8, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_Printable, 0x40fc6ed9, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);
DEFINE_GUID( CATID_RequiresDataPathHost, 0x0de86a50, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToMoniker, 0x0de86a51, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToStorage, 0x0de86a52, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToStreamInit, 0x0de86a53, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToStream, 0x0de86a54, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToMemory, 0x0de86a55, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToFile, 0x0de86a56, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_PersistsToPropertyBag, 0x0de86a57, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_InternetAware, 0x0de86a58, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);
DEFINE_GUID( CATID_DesignTimeUIActivatableControl, 0xf2bb56d1, 0xdb07, 0x11d1, 0xaa, 0x6b, 0x00, 0x60, 0x97, 0xdb, 0x95, 0x39);
DEFINE_GUID(CLSID_StdComponentCategoriesMgr, 0x0002e005, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
#ifdef __cplusplus
}
#endif
#endif /* __WIDL_COMCAT_H */