Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
3.0 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. item.h
  5. Abstract:
  6. This module contains the definition for the Server
  7. Extension Object Item class.
  8. Author:
  9. Don Dumitru (dondu@microsoft.com)
  10. Revision History:
  11. dondu 02/18/97 created
  12. --*/
  13. // item.h : Declaration of the CSEODictionaryItem
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CSEODictionaryItem
  16. class ATL_NO_VTABLE CSEODictionaryItem :
  17. public CComObjectRootEx<CComMultiThreadModelNoCS>,
  18. public CComCoClass<CSEODictionaryItem, &CLSID_CSEODictionaryItem>,
  19. public IDispatchImpl<ISEODictionaryItem, &IID_ISEODictionaryItem, &LIBID_SEOLib>
  20. {
  21. public:
  22. HRESULT FinalConstruct();
  23. void FinalRelease();
  24. DECLARE_PROTECT_FINAL_CONSTRUCT();
  25. DECLARE_REGISTRY_RESOURCEID_EX(IDR_StdAfx,
  26. L"SEODictionaryItem Class",
  27. L"SEO.SEODictionaryItem.1",
  28. L"SEO.SEODictionaryItem");
  29. DECLARE_GET_CONTROLLING_UNKNOWN();
  30. BEGIN_COM_MAP(CSEODictionaryItem)
  31. COM_INTERFACE_ENTRY(ISEODictionaryItem)
  32. COM_INTERFACE_ENTRY(IDispatch)
  33. // COM_INTERFACE_ENTRY(ISupportErrorInfo)
  34. COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  35. END_COM_MAP()
  36. // ISEODictionaryItem
  37. public:
  38. HRESULT STDMETHODCALLTYPE get_Value(VARIANT *pvarIndex, VARIANT *pvarResult);
  39. HRESULT STDMETHODCALLTYPE AddValue(VARIANT *pvarIndex, VARIANT *pvarValue);
  40. HRESULT STDMETHODCALLTYPE DeleteValue(VARIANT *pvarIndex);
  41. HRESULT STDMETHODCALLTYPE get_Count(VARIANT *pvarResult);
  42. HRESULT STDMETHODCALLTYPE GetStringA(DWORD dwIndex, DWORD *pchCount, LPSTR pszResult);
  43. HRESULT STDMETHODCALLTYPE GetStringW(DWORD dwIndex, DWORD *pchCount, LPWSTR pszResult);
  44. HRESULT STDMETHODCALLTYPE AddStringA(DWORD dwIndex, LPCSTR pszValue);
  45. HRESULT STDMETHODCALLTYPE AddStringW(DWORD dwIndex, LPCWSTR pszValue);
  46. private:
  47. class ValueClass {
  48. public:
  49. ValueClass();
  50. ValueClass(ValueClass& vcFrom);
  51. ~ValueClass();
  52. void Init();
  53. void Clear();
  54. HRESULT Assign(ValueClass& vcFrom);
  55. HRESULT Assign(LPCSTR pszFromA);
  56. HRESULT Assign(VARIANT *pvarFrom);
  57. HRESULT Assign(LPCWSTR pszFromW);
  58. HRESULT AsVariant(VARIANT *pvarResult);
  59. HRESULT AsStringA(DWORD *pchCount, LPSTR pszResult);
  60. HRESULT AsStringW(DWORD *pchCount, LPWSTR pszResult);
  61. void *operator new(size_t cbSize, ValueClass *pvcInPlace);
  62. void operator delete(void * p) {}
  63. #if _MSC_VER >= 1200
  64. void operator delete(void * p, ValueClass *pvcInPlace) {}
  65. #endif
  66. private:
  67. typedef enum tagValueEnum {
  68. veNone,
  69. veStringA,
  70. veVARIANT
  71. } ValueEnum;
  72. typedef struct tagValueType {
  73. ValueEnum veType;
  74. union {
  75. LPSTR pszStringA;
  76. VARIANT varVARIANT;
  77. };
  78. } ValueType;
  79. ValueType m_vtValue;
  80. };
  81. HRESULT AddSlot(DWORD *pdwIndex,ValueClass **ppvcResult);
  82. DWORD m_dwCount;
  83. ValueClass *m_pvcValues;
  84. CComPtr<IUnknown> m_pUnkMarshaler;
  85. };