⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connpnt.cpp

📁 OPCSERVER源代码
💻 CPP
字号:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000 by Timofei Bondarenko                             *
                                                                          *
 Main part of IConnectionPoint implementation
 **************************************************************************/

#include "privopc.h"
#include "connpnt.h"
#include LO_OLE_ERRORS_h

#include "enum.h"

/******* ConnectionPoint itself *******************************************/
/******* IConnectionPointContainer methods ********************************/

STDMETHODIMP loConnPnt1::FindConnectionPoint(REFIID riid, IConnectionPoint **ppCP)
{
 HRESULT hr = S_OK;
 IID myiid;
 if (!ppCP) hr = E_POINTER;
 else if (S_OK == (hr = GetConnectionInterface(&myiid)))
   if (!IsEqualIID(riid, myiid)) hr = CONNECT_E_NOCONNECTION;
   else if (S_OK == (hr = icp_AddRef()))
     {
//      IConnectionPoint::AddRef();
      (*ppCP = this)->AddRef();
      icp_Release();
     }

 UL_NOTICE((LOGID, "FindConnPoints() %s", loStrError(hr)));
 return hr;
}

STDMETHODIMP loConnPnt1::EnumConnectionPoints(IEnumConnectionPoints **ppEnum)
{
 HRESULT hr = S_OK;

 if (!ppEnum) hr = E_POINTER;
 else
   {
    *ppEnum = 0;
    if (S_OK == (hr = icp_AddRef()))
      {
       loEnumConnPnt1 *en = new loEnumConnPnt1(this);
       if (en) 
         {
          if (S_OK == (hr = en->initiate(icp_ObjTracker())))
            {
             *ppEnum = en;
#if LO_USE_FREEMARSHALL
             if (!freemarsh) en->DisableFreemarsh();
#else
             en->DisableFreemarsh();
#endif
            }
          else delete en;
         }
       else hr = E_OUTOFMEMORY;
       icp_Release();
      }
   }
 UL_NOTICE((LOGID, "EnumConnPoints() %s", loStrError(hr)));
 return hr;
}

/*** IConnectionPoint methods ****************************/

STDMETHODIMP loConnPnt1::GetConnectionPointContainer(IConnectionPointContainer **ppCPC)
{
 HRESULT hr = S_OK;
 if (!ppCPC) hr = E_POINTER;
 else if (S_OK == (hr = icp_AddRef()))
   {
//    IConnectionPointContainer::AddRef();
    (*ppCPC = this)->AddRef();
    icp_Release();
   }
 UL_NOTICE((LOGID, "GetConnPointContainer() %s", loStrError(hr)));
 return hr;
}

STDMETHODIMP loConnPnt1::EnumConnections(IEnumConnections **ppEnum)
{ return E_NOTIMPL; }

/* end of connpnt.cpp */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -