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

Windows编程

开发平台:

Visual C++

  1. // cpduck.h: Declaration of CProxyIDuckInt
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12. #ifndef _INC_CPDUCK_H
  13. #define _INC_CPDUCK_H
  14. #include "iduckint.h"
  15. extern const IID IID_IDuckInt;
  16. //////////////////////////////////////////////////////////////////////////////
  17. // CProxyIDuckInt
  18. template <class T>
  19. class CProxyIDuckInt : public IConnectionPointImpl<T, &IID_IDuckInt, CComDynamicUnkArray>
  20. {
  21. public:
  22. //IDuckInt : IUnknown
  23. public:
  24. HRESULT Fire_Quack(
  25. BSTR szWhosCalling)
  26. {
  27. int n = 1;
  28. WCHAR* pch = szWhosCalling;
  29. while (*pch != L'X')
  30. pch++;
  31. T* pT = (T*)this;
  32. pT->Lock();
  33. HRESULT ret;
  34. IUnknown** pp = m_vec.begin();
  35. while (pp < m_vec.end())
  36. {
  37. if (*pp != NULL)
  38. {
  39. *pch = (n / 10) + L'0';
  40. *(pch + 1)= (n % 10) + L'0';
  41. n++;
  42. IDuckInt* pIDuckInt = reinterpret_cast<IDuckInt*>(*pp);
  43. ret = pIDuckInt->Quack(szWhosCalling);
  44. }
  45. pp++;
  46. }
  47. pT->Unlock();
  48. return ret;
  49. }
  50. HRESULT Fire_Flap(
  51. BSTR szWhosCalling)
  52. {
  53. int n = 1;
  54. WCHAR* pch = szWhosCalling;
  55. while (*pch != L'X')
  56. pch++;
  57. T* pT = (T*)this;
  58. pT->Lock();
  59. HRESULT ret;
  60. IUnknown** pp = m_vec.begin();
  61. while (pp < m_vec.end())
  62. {
  63. if (*pp != NULL)
  64. {
  65. *pch = (n / 10) + L'0';
  66. *(pch + 1)= (n % 10) + L'0';
  67. n++;
  68. IDuckInt* pIDuckInt = reinterpret_cast<IDuckInt*>(*pp);
  69. ret = pIDuckInt->Flap(szWhosCalling);
  70. }
  71. pp++;
  72. }
  73. pT->Unlock();
  74. return ret;
  75. }
  76. HRESULT Fire_Paddle(
  77. BSTR szWhosCalling)
  78. {
  79. int n = 1;
  80. WCHAR* pch = szWhosCalling;
  81. while (*pch != L'X')
  82. pch++;
  83. T* pT = (T*)this;
  84. pT->Lock();
  85. HRESULT ret;
  86. IUnknown** pp = m_vec.begin();
  87. while (pp < m_vec.end())
  88. {
  89. if (*pp != NULL)
  90. {
  91. *pch = (n / 10) + L'0';
  92. *(pch + 1)= (n % 10) + L'0';
  93. n++;
  94. IDuckInt* pIDuckInt = reinterpret_cast<IDuckInt*>(*pp);
  95. ret = pIDuckInt->Paddle(szWhosCalling);
  96. }
  97. pp++;
  98. }
  99. pT->Unlock();
  100. return ret;
  101. }
  102. HRESULT Fire_Walk(
  103. BSTR szWhosCalling)
  104. {
  105. int n = 1;
  106. WCHAR* pch = szWhosCalling;
  107. while (*pch != L'X')
  108. pch++;
  109. T* pT = (T*)this;
  110. pT->Lock();
  111. HRESULT ret;
  112. IUnknown** pp = m_vec.begin();
  113. while (pp < m_vec.end())
  114. {
  115. if (*pp != NULL)
  116. {
  117. *pch = (n / 10) + L'0';
  118. *(pch + 1)= (n % 10) + L'0';
  119. n++;
  120. IDuckInt* pIDuckInt = reinterpret_cast<IDuckInt*>(*pp);
  121. ret = pIDuckInt->Walk(szWhosCalling);
  122. }
  123. pp++;
  124. }
  125. pT->Unlock();
  126. return ret;
  127. }
  128. };
  129. #endif