_IMSegmentEvents_CP.h
上传用户:hailongwei
上传日期:2020-11-29
资源大小:5839k
文件大小:2k
源码类别:

单片机开发

开发平台:

Visual C++

  1. #pragma once
  2. template<class T>
  3. class CProxy_IMSegmentEvents :
  4. public IConnectionPointImpl<T, &__uuidof(_IMSegmentEvents)>
  5. {
  6. public:
  7. HRESULT Fire_OnNotify( LONG  Addr)
  8. {
  9. HRESULT hr = S_OK;
  10. T * pThis = static_cast<T *>(this);
  11. int cConnections = m_vec.GetSize();
  12. for (int iConnection = 0; iConnection < cConnections; iConnection++)
  13. {
  14. pThis->Lock();
  15. CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
  16. pThis->Unlock();
  17. IDispatch * pConnection = static_cast<IDispatch *>(punkConnection.p);
  18. if (pConnection)
  19. {
  20. CComVariant avarParams[1];
  21. avarParams[0] = Addr; avarParams[0].vt = VT_I4;
  22. CComVariant varResult;
  23. DISPPARAMS params = { avarParams, NULL, 1, 0 };
  24. hr = pConnection->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, &varResult, NULL, NULL);
  25. }
  26. }
  27. return hr;
  28. }
  29. HRESULT Fire_OnLink( VARIANT_BOOL  LinkStatus)
  30. {
  31. HRESULT hr = S_OK;
  32. T * pThis = static_cast<T *>(this);
  33. int cConnections = m_vec.GetSize();
  34. for (int iConnection = 0; iConnection < cConnections; iConnection++)
  35. {
  36. pThis->Lock();
  37. CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
  38. pThis->Unlock();
  39. IDispatch * pConnection = static_cast<IDispatch *>(punkConnection.p);
  40. if (pConnection)
  41. {
  42. CComVariant avarParams[1];
  43. avarParams[0] = LinkStatus; avarParams[0].vt = VT_BOOL;
  44. CComVariant varResult;
  45. DISPPARAMS params = { avarParams, NULL, 1, 0 };
  46. hr = pConnection->Invoke(2, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, &varResult, NULL, NULL);
  47. }
  48. }
  49. return hr;
  50. }
  51. };