home *** CD-ROM | disk | FTP | other *** search
/ Supercompiler 1997 / SUPERCOMPILER97.iso / MS_VC.50 / SharedIDE / TEMPLATE / ATL / COMPREG.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-16  |  2.7 KB  |  118 lines

  1. // [!HeaderName] : Declaration of the [!ClassName]
  2. [!crlf]
  3.  
  4. #ifndef __[!UpperShortName]_H_
  5. #define __[!UpperShortName]_H_
  6. [!crlf]
  7.  
  8. #include "resource.h"       // main symbols
  9.  
  10. [!crlf]
  11. /////////////////////////////////////////////////////////////////////////////
  12. // [!ClassName]
  13.  
  14. class ATL_NO_VTABLE [!ClassName] : 
  15.     public CComObjectRootEx<CComSingleThreadModel>,
  16.     public CComCoClass<[!ClassName], &CLSID_[!CoClassName]>,
  17.     public IDispatchImpl<IComponentRegistrar, &IID_IComponentRegistrar, &LIBID_[!LibName]>
  18. {
  19. public:
  20.     [!ClassName]()
  21.     {
  22.     }
  23.  
  24. [!crlf]
  25. DECLARE_NO_REGISTRY()
  26.  
  27. [!crlf]
  28. BEGIN_COM_MAP([!ClassName])
  29.     COM_INTERFACE_ENTRY(IComponentRegistrar)
  30.     COM_INTERFACE_ENTRY(IDispatch)
  31. END_COM_MAP()
  32.  
  33. [!crlf]
  34. // IComponentRegistrar
  35. public:
  36.     STDMETHOD(Attach)(BSTR bstrPath)
  37.     {
  38.         return E_NOTIMPL;
  39.     }
  40.     STDMETHOD(RegisterAll)()
  41.     {
  42.         _ATL_OBJMAP_ENTRY* pEntry = _Module.m_pObjMap;
  43.         HRESULT hr = S_OK;
  44.         while (pEntry->pclsid != NULL)
  45.         {
  46.             if (pEntry->pfnGetObjectDescription() != NULL)
  47.             {
  48.                 hr = _Module.RegisterServer(TRUE, pEntry->pclsid);
  49.                 if (FAILED(hr))
  50.                     break;
  51.             }
  52.             pEntry++;
  53.         }
  54.         return hr;
  55.     }
  56.     STDMETHOD(UnregisterAll)()    
  57.     {
  58.         _ATL_OBJMAP_ENTRY* pEntry = _Module.m_pObjMap;
  59.         while (pEntry->pclsid != NULL)
  60.         {
  61.             if (pEntry->pfnGetObjectDescription() != NULL)
  62.                 _Module.UnregisterServer(pEntry->pclsid);
  63.             pEntry++;
  64.         }
  65.         return S_OK;
  66.     }
  67.     STDMETHOD(GetComponents)(SAFEARRAY **ppCLSIDs, SAFEARRAY **ppDescriptions)
  68.     {
  69.         _ATL_OBJMAP_ENTRY* pEntry = _Module.m_pObjMap;
  70.         int nComponents = 0;
  71.         while (pEntry->pclsid != NULL)
  72.         {
  73.             LPCTSTR pszDescription = pEntry->pfnGetObjectDescription();
  74.             if (pszDescription)
  75.                 nComponents++;
  76.             pEntry++;
  77.         }
  78.         SAFEARRAYBOUND rgBound[1];
  79.         rgBound[0].lLbound = 0;
  80.         rgBound[0].cElements = nComponents;
  81.         *ppCLSIDs = SafeArrayCreate(VT_BSTR, 1, rgBound);
  82.         *ppDescriptions = SafeArrayCreate(VT_BSTR, 1, rgBound);
  83.         pEntry = _Module.m_pObjMap;
  84.         for (long i=0; pEntry->pclsid != NULL; pEntry++)
  85.         {
  86.             LPCTSTR pszDescription = pEntry->pfnGetObjectDescription();
  87.             if (pszDescription)
  88.             {
  89.                 LPOLESTR pszCLSID;
  90.                 StringFromCLSID(*pEntry->pclsid, &pszCLSID);
  91.                 SafeArrayPutElement(*ppCLSIDs, &i, OLE2BSTR(pszCLSID));
  92.                 CoTaskMemFree(pszCLSID);
  93.                 SafeArrayPutElement(*ppCLSIDs, &i, T2BSTR(pszDescription));
  94.                 i++;
  95.             }
  96.         }
  97.  
  98.         return S_OK;
  99.     }
  100.     STDMETHOD(RegisterComponent)(BSTR bstrCLSID)
  101.     {
  102.         CLSID clsid;
  103.         CLSIDFromString(bstrCLSID, &clsid);
  104.         _Module.RegisterServer(TRUE, &clsid);
  105.         return S_OK;
  106.     }
  107.     STDMETHOD(UnregisterComponent)(BSTR bstrCLSID)
  108.     {
  109.         CLSID clsid;
  110.         CLSIDFromString(bstrCLSID, &clsid);
  111.         _Module.UnregisterServer(&clsid);
  112.         return S_OK;
  113.     }
  114. };
  115.  
  116. [!crlf]
  117. #endif //__[!UpperShortName]_H_
  118.