home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / common / msdev98 / template / atl / prowset.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-16  |  3.7 KB  |  144 lines

  1. // [!RowsetFile] : Declaration of the [!Rowset]
  2.  
  3. [!if=(FileExists, "FALSE")]
  4. #ifndef __[!Rowset]_H_
  5. #define __[!Rowset]_H_
  6. #include "resource.h"       // main symbols
  7. [!else]
  8. [!AddIncludeFile(TargetFile, "resource.h")]
  9. [!endif]
  10.  
  11. class C[!ShortName]WindowsFile: 
  12.     public WIN32_FIND_DATA
  13. {
  14. public:
  15.  
  16. BEGIN_PROVIDER_COLUMN_MAP(C[!ShortName]WindowsFile)
  17.     PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
  18.     PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
  19.     PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
  20.     PROVIDER_COLUMN_ENTRY("FileName", 4, cFileName)
  21.     PROVIDER_COLUMN_ENTRY("AltFileName", 5, cAlternateFileName)
  22. END_PROVIDER_COLUMN_MAP()
  23.  
  24. };
  25.  
  26. // [!Command]
  27. class ATL_NO_VTABLE [!Command] : 
  28. [!if=(ThreadingModel, "Single")]
  29.     public CComObjectRootEx<CComSingleThreadModel>,
  30. [!endif]
  31. [!if=(ThreadingModel, "Apartment")]
  32.     public CComObjectRootEx<CComSingleThreadModel>,
  33. [!endif]
  34. [!if=(ThreadingModel, "Both")]
  35.     public CComObjectRootEx<CComMultiThreadModel>,
  36. [!endif]
  37. [!if=(ThreadingModel, "Free")]
  38.     public CComObjectRootEx<CComMultiThreadModel>,
  39. [!endif]
  40.     public IAccessorImpl<[!Command]>,
  41.     public ICommandTextImpl<[!Command]>,
  42.     public ICommandPropertiesImpl<[!Command]>,
  43.     public IObjectWithSiteImpl<[!Command]>,
  44.     public IConvertTypeImpl<[!Command]>,
  45.     public IColumnsInfoImpl<[!Command]>
  46.  
  47. {
  48. public:
  49.  
  50. BEGIN_COM_MAP([!Command])
  51.     COM_INTERFACE_ENTRY(ICommand)
  52.     COM_INTERFACE_ENTRY(IObjectWithSite)
  53.     COM_INTERFACE_ENTRY(IAccessor)
  54.     COM_INTERFACE_ENTRY(ICommandProperties)
  55.     COM_INTERFACE_ENTRY2(ICommandText, ICommand)
  56.     COM_INTERFACE_ENTRY(IColumnsInfo)
  57.     COM_INTERFACE_ENTRY(IConvertType)
  58. END_COM_MAP()
  59.  
  60. // ICommand
  61. public:
  62.  
  63.     HRESULT FinalConstruct()
  64.     {
  65.         HRESULT hr = CConvertHelper::FinalConstruct();
  66.         if (FAILED (hr))
  67.             return hr;
  68.         hr = IAccessorImpl<[!Command]>::FinalConstruct();
  69.         if (FAILED(hr))
  70.             return hr;
  71.         return CUtlProps<[!Command]>::FInit();
  72.     }
  73.     void FinalRelease()
  74.     {
  75.         IAccessorImpl<[!Command]>::FinalRelease();
  76.     }
  77.  
  78.     HRESULT WINAPI Execute(IUnknown * pUnkOuter, REFIID riid, DBPARAMS * pParams, 
  79.                           LONG * pcRowsAffected, IUnknown ** ppRowset);
  80.  
  81.     static ATLCOLUMNINFO* GetColumnInfo([!Command]* pv, ULONG* pcInfo)
  82.     {
  83.         return C[!ShortName]WindowsFile::GetColumnInfo(pv,pcInfo);
  84.     }
  85.  
  86. BEGIN_PROPSET_MAP([!Command])
  87.     BEGIN_PROPERTY_SET(DBPROPSET_ROWSET)
  88.         PROPERTY_INFO_ENTRY(IAccessor)
  89.         PROPERTY_INFO_ENTRY(IColumnsInfo)
  90.         PROPERTY_INFO_ENTRY(IConvertType)
  91.         PROPERTY_INFO_ENTRY(IRowset)
  92.         PROPERTY_INFO_ENTRY(IRowsetIdentity)
  93.         PROPERTY_INFO_ENTRY(IRowsetInfo)
  94.         PROPERTY_INFO_ENTRY(IRowsetLocate)
  95.         PROPERTY_INFO_ENTRY(BOOKMARKS)
  96.         PROPERTY_INFO_ENTRY(BOOKMARKSKIPPED)
  97.         PROPERTY_INFO_ENTRY(BOOKMARKTYPE)
  98.         PROPERTY_INFO_ENTRY(CANFETCHBACKWARDS)
  99.         PROPERTY_INFO_ENTRY(CANHOLDROWS)
  100.         PROPERTY_INFO_ENTRY(CANSCROLLBACKWARDS)
  101.         PROPERTY_INFO_ENTRY(LITERALBOOKMARKS)
  102.         PROPERTY_INFO_ENTRY(ORDEREDBOOKMARKS)
  103.     END_PROPERTY_SET(DBPROPSET_ROWSET)
  104. END_PROPSET_MAP()
  105.  
  106. };
  107.  
  108. class [!Rowset] : public CRowsetImpl< [!Rowset], C[!ShortName]WindowsFile, [!Command]>
  109. {
  110. public:
  111.  
  112.     HRESULT Execute(DBPARAMS * pParams, LONG* pcRowsAffected)
  113.     {
  114.         USES_CONVERSION;
  115.         BOOL bFound = FALSE;
  116.         HANDLE hFile;
  117.  
  118.         LPTSTR  szDir = (m_strCommandText == _T("")) ? _T("*.*") : OLE2T(m_strCommandText);
  119.  
  120.         C[!ShortName]WindowsFile wf;
  121.         hFile = FindFirstFile(szDir, &wf);
  122.         if (hFile == INVALID_HANDLE_VALUE)
  123.             return DB_E_ERRORSINCOMMAND;
  124.         LONG cFiles = 1;
  125.         BOOL bMoreFiles = TRUE;
  126.         while (bMoreFiles)
  127.         {
  128.             if (!m_rgRowData.Add(wf))
  129.                 return E_OUTOFMEMORY;
  130.             bMoreFiles = FindNextFile(hFile, &wf);
  131.             cFiles++;
  132.         }
  133.         FindClose(hFile);
  134.         if (pcRowsAffected != NULL)
  135.             *pcRowsAffected = cFiles;
  136.         return S_OK;
  137.     }
  138. };
  139.  
  140.  
  141. [!if=(FileExists, "FALSE")]
  142. #endif //__[!Rowset]_H_
  143. [!endif]
  144.