Changelog: John K. Hohm <jhohm@acm.org> Beginngs of implementing The Component Categories Manager, coming soon to a comcat.dll near you. These definitions are enough to compile a program using the manager, but trying to instantiate the object will fail as it is not yet implemented. * include/wine/obj_enumguid.h : Created; contains defs of EnumGUID * include/wine/obj_comcat.h : Created; contains defs of CATID, CATEGORYINFO, EnumCATEGORYINFO, ICatInformation, ICatRegister, CLSID_StdComponentCategoriesMgr * include/wine/comcat.h : Removed CATID def; Included wine/obj_base.h, wine/obj_enumguid.h, wine/obj_comcat.h * include/Makefile.in : Added wine/obj_enumguid.h, wine/obj_comcat.h * ole/uuid.c : Included comcat.h to get UUIDs in uuid.lib equivalent All of my contributions are licensed under the LGPL, unless explicitly specified otherwise.
? include/wine/obj_comcat.h ? include/wine/obj_enumguid.h Index: include/Makefile.in =================================================================== RCS file: /home/wine/wine/include/Makefile.in,v retrieving revision 1.48 diff -u -r1.48 Makefile.in --- include/Makefile.in 5 May 2002 19:40:58 -0000 1.48 +++ include/Makefile.in 9 May 2002 03:06:15 -0000 @@ -143,6 +143,7 @@ wine/obj_cache.h \ wine/obj_channel.h \ wine/obj_clientserver.h \ + wine/obj_comcat.h \ wine/obj_commdlgbrowser.h \ wine/obj_connection.h \ wine/obj_contextmenu.h \ @@ -150,6 +151,7 @@ wine/obj_dataobject.h \ wine/obj_dockingwindowframe.h \ wine/obj_dragdrop.h \ + wine/obj_enumguid.h \ wine/obj_enumidlist.h \ wine/obj_errorinfo.h \ wine/obj_extracticon.h \ Index: include/comcat.h =================================================================== RCS file: /home/wine/wine/include/comcat.h,v retrieving revision 1.4 diff -u -r1.4 comcat.h --- include/comcat.h 10 Mar 2002 00:02:34 -0000 1.4 +++ include/comcat.h 9 May 2002 03:06:15 -0000 @@ -28,9 +28,8 @@ #ifndef __WINE_COMCAT_H #define __WINE_COMCAT_H -#include "unknwn.h" - -typedef GUID CATID; -typedef REFGUID REFCATID; +#include "wine/obj_base.h" +#include "wine/obj_enumguid.h" +#include "wine/obj_comcat.h" #endif /*__WINE_COMCAT_H */ Index: ole/uuid.c =================================================================== RCS file: /home/wine/wine/ole/uuid.c,v retrieving revision 1.9 diff -u -r1.9 uuid.c --- ole/uuid.c 2 May 2002 01:29:19 -0000 1.9 +++ ole/uuid.c 9 May 2002 03:06:15 -0000 @@ -47,6 +47,8 @@ #include "wine/obj_queryassociations.h" #include "wine/obj_channel.h" +#include "comcat.h" + /* FIXME: cguids declares GUIDs but does not define their values */ --- /dev/null Fri Mar 15 21:55:30 2002 +++ include/wine/obj_comcat.h Wed May 8 21:46:59 2002 @@ -0,0 +1,163 @@ +/* + * Defines the COM interfaces and APIs related to Component Category Manager + * + * Depends on 'obj_enumguid.h'. + * + * Copyright (C) 2002 John K. Hohm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_WINE_OBJ_COMCAT_H +#define __WINE_WINE_OBJ_COMCAT_H + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +/***************************************************************************** + * Types + */ +typedef GUID CATID; +typedef REFGUID REFCATID; +#define CATID_NULL GUID_NULL +#define IsEqualCATID(a, b) IsEqualGUID(a, b) + +typedef struct tagCATEGORYINFO { + CATID catid; /* category identifier for component */ + LCID lcid; /* locale identifier */ + OLECHAR szDescription[128]; /* description of the category */ +} CATEGORYINFO, *LPCATEGORYINFO; + +/***************************************************************************** + * Aliases for EnumGUID + */ +#define IEnumCATID IEnumGUID +#define LPENUMCATID LPENUMGUID +#define IID_IEnumCATID IID_IEnumGUID + +#define IEnumCLSID IEnumGUID +#define LPENUMCLSID LPENUMGUID +#define IID_IEnumCLSID IID_IEnumGUID + +/***************************************************************************** + * Predeclare the interfaces + */ +DEFINE_OLEGUID(IID_ICatInformation, 0x0002E013L, 0, 0); +typedef struct ICatInformation ICatInformation, *LPCATINFORMATION; + +DEFINE_OLEGUID(IID_ICatRegister, 0x0002E012L, 0, 0); +typedef struct ICatRegister ICatRegister, *LPCATREGISTER; + +DEFINE_OLEGUID(IID_IEnumCATEGORYINFO, 0x0002E011L, 0, 0); +typedef struct IEnumCATEGORYINFO IEnumCATEGORYINFO, *LPENUMCATEGORYINFO; + +/* The Component Category Manager */ +DEFINE_OLEGUID(CLSID_StdComponentCategoriesMgr, 0x0002E005L, 0, 0); + +/***************************************************************************** + * ICatInformation + */ +#define ICOM_INTERFACE ICatInformation +#define ICatInformation_METHODS \ + ICOM_METHOD2(HRESULT, EnumCategories, LCID, lcid, IEnumCATEGORYINFO**, ppenumCatInfo) \ + ICOM_METHOD3(HRESULT, GetCategoryDesc, REFCATID, rcatid, LCID, lcid, PWCHAR*, ppszDesc) \ + ICOM_METHOD5(HRESULT, EnumClassesOfCategories, ULONG, cImplemented, CATID*, rgcatidImpl, ULONG, cRequired, CATID*, rgcatidReq, IEnumCLSID**, ppenumCLSID) \ + ICOM_METHOD5(HRESULT, IsClassOfCategories, REFCLSID, rclsid, ULONG, cImplemented, CATID*, rgcatidImpl, ULONG, cRequired, CATID*, rgcatidReq) \ + ICOM_METHOD2(HRESULT, EnumImplCategoriesOfClass, REFCLSID, rclsid, IEnumCATID**, ppenumCATID) \ + ICOM_METHOD2(HRESULT, EnumReqCategoriesOfClass, REFCLSID, rclsid, IEnumCATID**, ppenumCATID) +#define ICatInformation_IMETHODS \ + IUnknown_IMETHODS \ + ICatInformation_METHODS +ICOM_DEFINE(ICatInformation,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE +/*** IUnknown methods ***/ +#define ICatInformation_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define ICatInformation_AddRef(p) ICOM_CALL (AddRef,p) +#define ICatInformation_Release(p) ICOM_CALL (Release,p) +/*** ICatInformation methods ***/ +#define ICatInformation_EnumCategories(p,a,b) ICOM_CALL2(EnumCategories,p,a,b) +#define ICatInformation_GetCategoryDesc(p,a,b,c) ICOM_CALL3(GetCategoryDesc,p,a,b,c) +#define ICatInformation_EnumClassesOfCategories(p,a,b,c,d,e) ICOM_CALL5(EnumClassesOfCategories,p,a,b,c,d,e) +#define ICatInformation_IsClassOfCategories(p,a,b,c,d,e) ICOM_CALL5(IsClassOfCategories,p,a,b,c,d,e) +#define ICatInformation_EnumImplCategoriesOfClass(p,a,b) ICOM_CALL2(EnumImplCategoriesOfClass(p,a,b) +#define ICatInformation_EnumReqCategoriesOfClass(p,a,b) ICOM_CALL2(EnumReqCategoriesOfClass(p,a,b) +#endif + +/***************************************************************************** + * ICatRegister + */ +#define ICOM_INTERFACE ICatRegister +#define ICatRegister_METHODS \ + ICOM_METHOD2(HRESULT, RegisterCategories, ULONG, cCategories, CATEGORYINFO*, rgCategoryInfo) \ + ICOM_METHOD2(HRESULT, UnRegisterCategories, ULONG, cCategories, CATID*, rgcatid) \ + ICOM_METHOD3(HRESULT, RegisterClassImplCategories, REFCLSID, rclsid, ULONG, cCategories, CATID*, rgcatid) \ + ICOM_METHOD3(HRESULT, UnRegisterClassImplCategories, REFCLSID, rclsid, ULONG, cCategories, CATID*, rgcatid) \ + ICOM_METHOD3(HRESULT, RegisterClassReqCategories, REFCLSID, rclsid, ULONG, cCategories, CATID*, rgcatid) \ + ICOM_METHOD3(HRESULT, UnRegisterClassReqCategories, REFCLSID, rclsid, ULONG, cCategories, CATID*, rgcatid) +#define ICatRegister_IMETHODS \ + IUnknown_IMETHODS \ + ICatRegister_METHODS +ICOM_DEFINE(ICatRegister,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE +/*** IUnknown methods ***/ +#define ICatRegister_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define ICatRegister_AddRef(p) ICOM_CALL (AddRef,p) +#define ICatRegister_Release(p) ICOM_CALL (Release,p) +/*** ICatRegister methods ***/ +#define ICatRegister_RegisterCategories(p,a,b) ICOM_CALL2(RegisterCategories,p,a,b) +#define ICatRegister_UnRegisterCategories(p,a,b) ICOM_CALL2(UnRegisterCategories,p,a,b) +#define ICatRegister_RegisterClassImplCategories(p,a,b,c) ICOM_CALL3(RegisterClassImplCategories,p,a,b,c) +#define ICatRegister_UnRegisterClassImplCategories(p,a,b,c) ICOM_CALL3(UnRegisterClassImplCategories,p,a,b,c) +#define ICatRegister_RegisterClassReqCategories(p,a,b,c) ICOM_CALL3(RegisterClassReqCategories,p,a,b,c) +#define ICatRegister_UnRegisterClassReqCategories(p,a,b,c) ICOM_CALL3(UnRegisterClassReqCategories,p,a,b,c) +#endif + +/***************************************************************************** + * IEnumCATEGORYINFO + */ +#define ICOM_INTERFACE IEnumCATEGORYINFO +#define IEnumCATEGORYINFO_METHODS \ + ICOM_METHOD3(HRESULT, Next, ULONG, celt, CATEGORYINFO*, rgelt, ULONG*, pceltFetched) \ + ICOM_METHOD1(HRESULT, Skip, ULONG, celt) \ + ICOM_METHOD (HRESULT, Reset) \ + ICOM_METHOD1(HRESULT, Clone, IEnumCATEGORYINFO**, ppenum) +#define IEnumCATEGORYINFO_IMETHODS \ + IUnknown_IMETHODS \ + IEnumCATEGORYINFO_METHODS +ICOM_DEFINE(IEnumCATEGORYINFO,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE +/*** IUnknown methods ***/ +#define IEnumCATEGORYINFO_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IEnumCATEGORYINFO_AddRef(p) ICOM_CALL (AddRef,p) +#define IEnumCATEGORYINFO_Release(p) ICOM_CALL (Release,p) +/*** IEnumCATEGORYINFO methods ***/ +#define IEnumCATEGORYINFO_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c) +#define IEnumCATEGORYINFO_Skip(p,a) ICOM_CALL1(Skip,p,a) +#define IEnumCATEGORYINFO_Reset(p) ICOM_CALL(Reset,p) +#define IEnumCATEGORYINFO_Clone(p,a) ICOM_CALL1(Clone,p,a) +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_WINE_OBJ_COMCAT_H */ --- /dev/null Fri Mar 15 21:55:30 2002 +++ include/wine/obj_enumguid.h Wed May 8 21:26:08 2002 @@ -0,0 +1,67 @@ +/* + * Defines the COM interfaces and APIs related to EnumGUID + * + * Depends on 'obj_base.h'. + * + * Copyright (C) 2002 John K. Hohm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_WINE_OBJ_ENUMGUID_H +#define __WINE_WINE_OBJ_ENUMGUID_H + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +/***************************************************************************** + * Predeclare the interfaces + */ +DEFINE_OLEGUID(IID_IEnumGUID, 0x0002E000L, 0, 0); +typedef struct IEnumGUID IEnumGUID, *LPENUMGUID; + +/***************************************************************************** + * IEnumGUID + */ +#define ICOM_INTERFACE IEnumGUID +#define IEnumGUID_METHODS \ + ICOM_METHOD3(HRESULT, Next, ULONG, celt, GUID*, rgelt, ULONG*, pceltFetched) \ + ICOM_METHOD1(HRESULT, Skip, ULONG, celt) \ + ICOM_METHOD (HRESULT, Reset) \ + ICOM_METHOD1(HRESULT, Clone, IEnumGUID**, ppenum) +#define IEnumGUID_IMETHODS \ + IUnknown_IMETHODS \ + IEnumGUID_METHODS +ICOM_DEFINE(IEnumGUID,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE +/*** IUnknown methods ***/ +#define IEnumGUID_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IEnumGUID_AddRef(p) ICOM_CALL (AddRef,p) +#define IEnumGUID_Release(p) ICOM_CALL (Release,p) +/*** IEnumGUID methods ***/ +#define IEnumGUID_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c) +#define IEnumGUID_Skip(p,a) ICOM_CALL1(Skip,p,a) +#define IEnumGUID_Reset(p) ICOM_CALL(Reset,p) +#define IEnumGUID_Clone(p,a) ICOM_CALL1(Clone,p,a) +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_WINE_OBJ_ENUMGUID_H */