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.
 
 
 
 
 
 

101 lines
2.6 KiB

/*++
Copyright (C) 1993-1999 Microsoft Corporation
Module Name:
iextconn.cpp
Abstract:
Implementation of IExternalConnection as required for an
in-process object that supports linking to embedding.
Specifically, this will call IOleObject::Close when there
are no more strong locks on the object.
--*/
#include "polyline.h"
#include "unkhlpr.h"
// CImpIExternalConnection interface implementation
CImpIExternalConnection::CImpIExternalConnection(
PCPolyline pObj,
LPUNKNOWN pUnkOuter
)
{
m_cRef=0;
m_pObj=pObj;
m_pUnkOuter=pUnkOuter;
m_cLockStrong=0L;
}
IMPLEMENT_CONTAINED_DESTRUCTOR(CImpIExternalConnection)
IMPLEMENT_CONTAINED_IUNKNOWN(CImpIExternalConnection)
/*
* CImpIExternalConnection::AddConnection
*
* Purpose:
* Informs the object that a strong connection has been made to it.
*
* Parameters:
* dwConn DWORD identifying the type of connection, taken
* from the EXTCONN enumeration.
* dwReserved DWORD reserved. This is used inside OLE and
* should not be validated.
*
* Return Value:
* DWORD The number of connection counts on the
* object, used for debugging purposes only.
*/
STDMETHODIMP_(DWORD) CImpIExternalConnection::AddConnection(
DWORD dwConn,
DWORD /* dwReserved */
)
{
if (EXTCONN_STRONG & dwConn)
return ++m_cLockStrong;
return 0;
}
/*
* CImpIExternalConnection::ReleaseConnection
*
* Purpose:
* Informs an object that a connection has been taken away from
* it in which case the object may need to shut down.
*
* Parameters:
* dwConn DWORD identifying the type of connection,
* taken from the EXTCONN enumeration.
* dwReserved DWORD reserved. This is used inside OLE and
* should not be validated.
* dwRerved DWORD reserved
* fLastReleaseCloses BOOL indicating if the last call to this
* function should close the object.
*
* Return Value:
* DWORD The number of remaining connection counts on
* the object, used for debugging purposes only.
*/
STDMETHODIMP_(DWORD) CImpIExternalConnection::ReleaseConnection(
DWORD dwConn,
DWORD /* dwReserved */,
BOOL fLastReleaseCloses
)
{
if (EXTCONN_STRONG==dwConn)
{
if (0==--m_cLockStrong && fLastReleaseCloses)
m_pObj->m_pImpIOleObject->Close(OLECLOSE_SAVEIFDIRTY);
return m_cLockStrong;
}
return 0L;
}