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

  1. // Session.h : Declaration of the [!Session]
  2.  
  3. [!if=(FileExists, "FALSE")]
  4. #ifndef __[!Session]_H_
  5. #define __[!Session]_H_
  6.  
  7. #include "resource.h"       // main symbols
  8. #include "[!RowsetFile]"
  9. [!else]
  10. [!AddIncludeFile(TargetFile, "resource.h")]
  11. [!AddIncludeFile(TargetFile, RowsetFile)]
  12. [!endif]
  13.  
  14. class [!Session]TRSchemaRowset;
  15. class [!Session]ColSchemaRowset;
  16. class [!Session]PTSchemaRowset;
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19. // [!Session]
  20. class ATL_NO_VTABLE [!Session] : 
  21. [!if=(ThreadingModel, "Single")]
  22.     public CComObjectRootEx<CComSingleThreadModel>,
  23. [!endif]
  24. [!if=(ThreadingModel, "Apartment")]
  25.     public CComObjectRootEx<CComSingleThreadModel>,
  26. [!endif]
  27. [!if=(ThreadingModel, "Both")]
  28.     public CComObjectRootEx<CComMultiThreadModel>,
  29. [!endif]
  30. [!if=(ThreadingModel, "Free")]
  31.     public CComObjectRootEx<CComMultiThreadModel>,
  32. [!endif]
  33.     public IGetDataSourceImpl<[!Session]>,
  34.     public IOpenRowsetImpl<[!Session]>,
  35.     public ISessionPropertiesImpl<[!Session]>,
  36.     public IObjectWithSiteSessionImpl<[!Session]>,
  37.     public IDBSchemaRowsetImpl<[!Session]>,
  38.     public IDBCreateCommandImpl<[!Session], [!Command]>
  39. {
  40. public:
  41.     [!Session]()
  42.     {
  43.     }
  44.     HRESULT FinalConstruct()
  45.     {
  46.         return FInit();
  47.     }
  48.  
  49.     STDMETHOD(OpenRowset)(IUnknown *pUnk, DBID *pTID, DBID *pInID, REFIID riid,
  50.                        ULONG cSets, DBPROPSET rgSets[], IUnknown **ppRowset)
  51.     {
  52.         [!Rowset]* pRowset;
  53.         return CreateRowset(pUnk, pTID, pInID, riid, cSets, rgSets, ppRowset, pRowset);
  54.     }
  55.  
  56.  
  57. BEGIN_PROPSET_MAP([!Session])
  58.     BEGIN_PROPERTY_SET(DBPROPSET_SESSION)
  59.         PROPERTY_INFO_ENTRY(SESS_AUTOCOMMITISOLEVELS)
  60.     END_PROPERTY_SET(DBPROPSET_SESSION)
  61. END_PROPSET_MAP()
  62.  
  63. BEGIN_COM_MAP([!Session])
  64.     COM_INTERFACE_ENTRY(IGetDataSource)
  65.     COM_INTERFACE_ENTRY(IOpenRowset)
  66.     COM_INTERFACE_ENTRY(ISessionProperties)
  67.     COM_INTERFACE_ENTRY(IObjectWithSite)
  68.     COM_INTERFACE_ENTRY(IDBCreateCommand)
  69.     COM_INTERFACE_ENTRY(IDBSchemaRowset)
  70. END_COM_MAP()
  71.  
  72. BEGIN_SCHEMA_MAP([!Session])
  73.     SCHEMA_ENTRY(DBSCHEMA_TABLES, [!Session]TRSchemaRowset)
  74.     SCHEMA_ENTRY(DBSCHEMA_COLUMNS, [!Session]ColSchemaRowset)
  75.     SCHEMA_ENTRY(DBSCHEMA_PROVIDER_TYPES, [!Session]PTSchemaRowset)
  76. END_SCHEMA_MAP()
  77.  
  78. };
  79.  
  80. class [!Session]TRSchemaRowset : 
  81.     public CRowsetImpl< [!Session]TRSchemaRowset, CTABLESRow, [!Session]>
  82. {
  83. public:
  84.     HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
  85.     {
  86.         USES_CONVERSION;
  87.         C[!ShortName]WindowsFile wf;
  88.         CTABLESRow trData;
  89.         lstrcpyW(trData.m_szType, OLESTR("TABLE"));
  90.         lstrcpyW(trData.m_szDesc, OLESTR("The Directory Table"));
  91.  
  92.         HANDLE hFile = INVALID_HANDLE_VALUE;
  93.         TCHAR szDir[MAX_PATH + 1];
  94.         DWORD cbCurDir = GetCurrentDirectory(MAX_PATH, szDir);
  95.         lstrcat(szDir, _T("\\*.*"));
  96.         hFile = FindFirstFile(szDir, &wf);
  97.         if (hFile == INVALID_HANDLE_VALUE)
  98.             return E_FAIL; // User doesn't have a c:\ drive
  99.         FindClose(hFile);
  100.         lstrcpynW(trData.m_szTable, T2OLE(szDir), SIZEOF_MEMBER(CTABLESRow, m_szTable));
  101.         if (!m_rgRowData.Add(trData))
  102.             return E_OUTOFMEMORY;
  103.         *pcRowsAffected = 1;
  104.         return S_OK;
  105.     }
  106.  
  107. };
  108.  
  109.  
  110. class [!Session]ColSchemaRowset : 
  111.     public CRowsetImpl< [!Session]ColSchemaRowset, CCOLUMNSRow, [!Session]>
  112. {
  113. public:
  114.     HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
  115.     {
  116.         USES_CONVERSION;
  117.         C[!ShortName]WindowsFile wf;
  118.         HANDLE hFile = INVALID_HANDLE_VALUE;
  119.         TCHAR szDir[MAX_PATH + 1];
  120.         DWORD cbCurDir = GetCurrentDirectory(MAX_PATH, szDir);
  121.         lstrcat(szDir, _T("\\*.*"));
  122.         hFile = FindFirstFile(szDir, &wf);
  123.         if (hFile == INVALID_HANDLE_VALUE)
  124.             return E_FAIL; // User doesn't have a c:\ drive
  125.         FindClose(hFile);// szDir has got the tablename
  126.  
  127.         DBID dbid;
  128.         memset(&dbid, 0, sizeof(DBID));
  129.         dbid.uName.pwszName = T2OLE(szDir);
  130.         dbid.eKind = DBKIND_NAME;
  131.         return InitFromRowset < _RowsetArrayType > (m_rgRowData, &dbid, NULL, m_spUnkSite, pcRowsAffected);
  132.     }
  133. };
  134.  
  135. class [!Session]PTSchemaRowset : 
  136.     public CRowsetImpl< [!Session]PTSchemaRowset, CPROVIDER_TYPERow, [!Session]>
  137. {
  138. public:
  139.     HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
  140.     {
  141.         return S_OK;
  142.     }
  143. };
  144.  
  145. [!if=(FileExists, "FALSE")]
  146. #endif //__[!Session]_H_
  147. [!endif]
  148.