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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * IEXTCONN.CPP
  3.  * Polyline Component Chapter 23
  4.  *
  5.  * Implementation of IExternalConnection as required for an
  6.  * in-process object that supports linking to embedding.
  7.  * Specifically, this will call IOleObject::Close when there
  8.  * are no more strong locks on the object.
  9.  *
  10.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  11.  *
  12.  * Kraig Brockschmidt, Microsoft
  13.  * Internet  :  kraigb@microsoft.com
  14.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  15.  */
  16. #include "polyline.h"
  17. /*
  18.  * CImpIExternalConnection::CImpIExternalConnection
  19.  * CImpIExternalConnection::~CImpIExternalConnection
  20.  *
  21.  * Parameters (Constructor):
  22.  *  pObj            PCPolyline of the object we're in.
  23.  *  pUnkOuter       LPUNKNOWN to which we delegate.
  24.  */
  25. CImpIExternalConnection::CImpIExternalConnection(PCPolyline pObj
  26.     , LPUNKNOWN pUnkOuter)
  27.     {
  28.     m_cRef=0;
  29.     m_pObj=pObj;
  30.     m_pUnkOuter=pUnkOuter;
  31.     m_cLockStrong=0L;
  32.     return;
  33.     }
  34. CImpIExternalConnection::~CImpIExternalConnection(void)
  35.     {
  36.     return;
  37.     }
  38. /*
  39.  * CImpIExternalConnection::QueryInterface
  40.  * CImpIExternalConnection::AddRef
  41.  * CImpIExternalConnection::Release
  42.  *
  43.  * Purpose:
  44.  *  Delegating IUnknown members for CImpIExternalConnection.
  45.  */
  46. STDMETHODIMP CImpIExternalConnection::QueryInterface(REFIID riid
  47.     , LPVOID *ppv)
  48.     {
  49.     return m_pUnkOuter->QueryInterface(riid, ppv);
  50.     }
  51. STDMETHODIMP_(ULONG) CImpIExternalConnection::AddRef(void)
  52.     {
  53.     ++m_cRef;
  54.     return m_pUnkOuter->AddRef();
  55.     }
  56. STDMETHODIMP_(ULONG) CImpIExternalConnection::Release(void)
  57.     {
  58.     --m_cRef;
  59.     return m_pUnkOuter->Release();
  60.     }
  61. /*
  62.  * CImpIExternalConnection::AddConnection
  63.  *
  64.  * Purpose:
  65.  *  Informs the object that a strong connection has been made to it.
  66.  *
  67.  * Parameters:
  68.  *  dwConn          DWORD identifying the type of connection, taken
  69.  *                  from the EXTCONN enumeration.
  70.  *  dwReserved      DWORD reserved.  This is used inside OLE and
  71.  *                  should not be validated.
  72.  *
  73.  * Return Value:
  74.  *  DWORD           The number of connection counts on the
  75.  *                  object, used for debugging purposes only.
  76.  */
  77. STDMETHODIMP_(DWORD) CImpIExternalConnection::AddConnection
  78.     (DWORD dwConn, DWORD dwReserved)
  79.     {
  80.     if (EXTCONN_STRONG & dwConn)
  81.         return ++m_cLockStrong;
  82.     return 0;
  83.     }
  84. /*
  85.  * CImpIExternalConnection::ReleaseConnection
  86.  *
  87.  * Purpose:
  88.  *  Informs an object that a connection has been taken away from
  89.  *  it in which case the object may need to shut down.
  90.  *
  91.  * Parameters:
  92.  *  dwConn              DWORD identifying the type of connection,
  93.  *                      taken from the EXTCONN enumeration.
  94.  *  dwReserved          DWORD reserved.  This is used inside OLE and
  95.  *                      should not be validated.
  96.  *  dwRerved            DWORD reserved
  97.  *  fLastReleaseCloses  BOOL indicating if the last call to this
  98.  *                      function should close the object.
  99.  *
  100.  * Return Value:
  101.  *  DWORD           The number of remaining connection counts on
  102.  *                  the object, used for debugging purposes only.
  103.  */
  104. STDMETHODIMP_(DWORD) CImpIExternalConnection::ReleaseConnection
  105.     (DWORD dwConn, DWORD dwReserved, BOOL fLastReleaseCloses)
  106.     {
  107.     if (EXTCONN_STRONG==dwConn)
  108.         {
  109.         if (0==--m_cLockStrong && fLastReleaseCloses)
  110.             m_pObj->m_pImpIOleObject->Close(OLECLOSE_SAVEIFDIRTY);
  111.         return m_cLockStrong;
  112.         }
  113.     return 0L;
  114.     }