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.

80 lines
2.4 KiB

  1. // NextLink.h : Declaration of the CNextLink
  2. #ifndef __NEXTLINK_H_
  3. #define __NEXTLINK_H_
  4. #include "resource.h" // main symbols
  5. #include <asptlb.h> // Active Server Pages Definitions
  6. #include "LinkFile.h"
  7. #include "lock.h"
  8. #include "context.h"
  9. /////////////////////////////////////////////////////////////////////////////
  10. // CNextLink
  11. class ATL_NO_VTABLE CNextLink :
  12. public CComObjectRootEx<CComMultiThreadModel>,
  13. public CComCoClass<CNextLink, &CLSID_NextLink>,
  14. public ISupportErrorInfo,
  15. public IDispatchImpl<INextLink, &IID_INextLink, &LIBID_NextLink>
  16. {
  17. public:
  18. CNextLink()
  19. {
  20. }
  21. public:
  22. DECLARE_REGISTRY_RESOURCEID(IDR_NEXTLINK)
  23. DECLARE_GET_CONTROLLING_UNKNOWN()
  24. BEGIN_COM_MAP(CNextLink)
  25. COM_INTERFACE_ENTRY(INextLink)
  26. COM_INTERFACE_ENTRY(IDispatch)
  27. COM_INTERFACE_ENTRY(ISupportErrorInfo)
  28. COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  29. END_COM_MAP()
  30. HRESULT FinalConstruct()
  31. {
  32. return CoCreateFreeThreadedMarshaler(
  33. GetControllingUnknown(), &m_pUnkMarshaler.p );
  34. }
  35. void FinalRelease()
  36. {
  37. m_pUnkMarshaler.Release();
  38. }
  39. // ISupportsErrorInfo
  40. STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  41. // INextLink
  42. public:
  43. STDMETHOD(get_About)(/*[out, retval]*/ BSTR *pVal);
  44. STDMETHOD(get_GetListIndex)(BSTR bstrLinkFile, /*[out, retval]*/ int *pVal);
  45. STDMETHOD(get_GetListCount)(BSTR bstrLinkFile, /*[out, retval]*/ int *pVal);
  46. STDMETHOD(get_GetNthDescription)(BSTR bstrLinkFile, int nIndex, /*[out, retval]*/ BSTR *pVal);
  47. STDMETHOD(get_GetNthURL)(BSTR bstrLinkFile, int nIndex, /*[out, retval]*/ BSTR *pVal);
  48. STDMETHOD(get_GetPreviousDescription)(BSTR bstrLinkFile, /*[out, retval]*/ BSTR *pVal);
  49. STDMETHOD(get_GetPreviousURL)(BSTR bstrLinkFile, /*[out, retval]*/ BSTR *pVal);
  50. STDMETHOD(get_GetNextDescription)(BSTR bstrLinkFile, /*[out, retval]*/ BSTR *pVal);
  51. STDMETHOD(get_GetNextURL)(BSTR, /*[out, retval]*/ BSTR *pVal);
  52. static void ClearLinkFiles();
  53. static void RaiseException( LPOLESTR );
  54. static void RaiseException( UINT );
  55. private:
  56. CLinkFilePtr LinkFile( UINT, BSTR );
  57. CLinkFilePtr LinkFile( CContext&, UINT, BSTR );
  58. bool GetPage( CContext&, String& );
  59. bool GetFileAndPage( UINT, BSTR, CLinkFilePtr&, String& );
  60. typedef TSafeStringMap<CLinkFilePtr> LinkFileMapT;
  61. CComPtr<IUnknown> m_pUnkMarshaler;
  62. static LinkFileMapT s_linkFileMap;
  63. };
  64. #endif //__NEXTLINK_H_