SESSION.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // Session.h : Declaration of the CDirSession
  2. //
  3. // This is a part of the ActiveX Template Library.
  4. // Copyright (C) 1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // ActiveX Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // ActiveX Template Library product.
  12. #ifndef __SESSION_H_
  13. #define __SESSION_H_
  14. #include "resource.h"       // main symbols
  15. #include "rowset.h"
  16. class CDirTRSchemaRowset;
  17. class CDirColSchemaRowset;
  18. class CDirPTSchemaRowset;
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CDirSession
  21. class ATL_NO_VTABLE CDirSession :
  22. public CComObjectRootEx<CComMultiThreadModel>,
  23. public IGetDataSourceImpl<CDirSession>,
  24. public ISessionPropertiesImpl<CDirSession>,
  25. public IObjectWithSiteSessionImpl<CDirSession>,
  26. public IDBCreateCommandImpl<CDirSession, CDirCommand>,
  27. public IOpenRowsetImpl<CDirSession>,
  28. public IDBSchemaRowsetImpl<CDirSession>
  29. {
  30. public:
  31. CDirSession()
  32. {
  33. }
  34. HRESULT FinalConstruct()
  35. {
  36. return FInit();
  37. }
  38. STDMETHOD(OpenRowset)(IUnknown *pUnkOuter, DBID *pTableID, DBID *pIndexID, REFIID riid,
  39.    ULONG cPropertySets, DBPROPSET rgPropertySets[], IUnknown **ppRowset)
  40. {
  41. CDirRowset* pRowset;
  42. return CreateRowset(pUnkOuter, pTableID, pIndexID, riid, cPropertySets,
  43. rgPropertySets, ppRowset, pRowset);
  44. }
  45. BEGIN_PROPSET_MAP(CDirSession)
  46. CHAIN_PROPERTY_SET(CDirCommand)
  47. END_PROPSET_MAP()
  48. BEGIN_COM_MAP(CDirSession)
  49. COM_INTERFACE_ENTRY(IGetDataSource)
  50. COM_INTERFACE_ENTRY(IDBSchemaRowset)
  51. COM_INTERFACE_ENTRY(ISessionProperties)
  52. COM_INTERFACE_ENTRY(IObjectWithSite)
  53. COM_INTERFACE_ENTRY(IOpenRowset)
  54. COM_INTERFACE_ENTRY(IDBCreateCommand)
  55. END_COM_MAP()
  56. BEGIN_SCHEMA_MAP(CDirSession)
  57. SCHEMA_ENTRY(DBSCHEMA_TABLES, CDirTRSchemaRowset)
  58. SCHEMA_ENTRY(DBSCHEMA_COLUMNS, CDirColSchemaRowset)
  59. SCHEMA_ENTRY(DBSCHEMA_PROVIDER_TYPES, CDirPTSchemaRowset)
  60. END_SCHEMA_MAP()
  61. };
  62. class CDirTRSchemaRowset :
  63. public CRowsetImpl< CDirTRSchemaRowset, CTABLESRow, CDirSession>
  64. {
  65. public:
  66. HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
  67. {
  68. USES_CONVERSION;
  69. CWindowsFile wf;
  70. CTABLESRow trData;
  71. lstrcpyW(trData.m_szType, OLESTR("TABLE"));
  72. lstrcpyW(trData.m_szDesc, OLESTR("The Directory Table"));
  73. HANDLE hFile = INVALID_HANDLE_VALUE;
  74. TCHAR szDir[MAX_PATH + 1];
  75. DWORD cbCurDir = GetCurrentDirectory(MAX_PATH, szDir);
  76. lstrcat(szDir, _T("\*.*"));
  77. hFile = FindFirstFile(szDir, &wf);
  78. if (hFile == INVALID_HANDLE_VALUE)
  79. return E_FAIL; // User doesn't have a c: drive
  80. FindClose(hFile);
  81. lstrcpynW(trData.m_szTable, T2OLE(szDir), SIZEOF_MEMBER(CTABLESRow, m_szTable));
  82. if (!m_rgRowData.Add(trData))
  83. return E_OUTOFMEMORY;
  84. *pcRowsAffected = 1;
  85. return S_OK;
  86. }
  87. };
  88. class CDirColSchemaRowset :
  89. public CRowsetImpl< CDirColSchemaRowset, CCOLUMNSRow, CDirSession>
  90. {
  91. public:
  92. HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
  93. {
  94. USES_CONVERSION;
  95. CWindowsFile wf;
  96. HANDLE hFile = INVALID_HANDLE_VALUE;
  97. TCHAR szDir[MAX_PATH + 1];
  98. DWORD cbCurDir = GetCurrentDirectory(MAX_PATH, szDir);
  99. lstrcat(szDir, _T("\*.*"));
  100. hFile = FindFirstFile(szDir, &wf);
  101. if (hFile == INVALID_HANDLE_VALUE)
  102. return E_FAIL; // User doesn't have a c: drive
  103. FindClose(hFile);// szDir has got the tablename
  104. DBID dbid;
  105. memset(&dbid, 0, sizeof(DBID));
  106. dbid.uName.pwszName = T2OLE(szDir);
  107. dbid.eKind = DBKIND_NAME;
  108. return InitFromRowset < _RowsetArrayType > (m_rgRowData, &dbid, NULL, m_spUnkSite, pcRowsAffected);
  109. }
  110. };
  111. class CDirPTSchemaRowset :
  112. public CRowsetImpl< CDirColSchemaRowset, CPROVIDER_TYPERow, CDirSession>
  113. {
  114. public:
  115. HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
  116. {
  117. return S_OK;
  118. }
  119. };
  120. #endif //__SESSION_H_