📄 event1.cpp
字号:
// Event1.cpp : Implementation of CEvent1
#include "stdafx.h"
#include "Simple11.h"
#include "Event1.h"
/////////////////////////////////////////////////////////////////////////////
// CEvent1
STDMETHODIMP CEvent1::Add(long n1, long n2)
{
long nResult = n1 + n2;
for( int i=0; i<10; i++)
{
if( m_pCallBack[i] ) // 如果回调接口有效
m_pCallBack[i]->Fire_Result( nResult ); // 则发出事件/通知
}
return S_OK;
}
STDMETHODIMP CEvent1::Advise(ICallBack *pCallBack, long *pdwCookie)
{
if( NULL == pCallBack ) // 居然给我一个空指针?!
return E_INVALIDARG;
for( int i=0; i<10; i++) // 寻找一个保存该接口指针的位置
{
if( NULL == m_pCallBack[i] ) // 找到了
{
m_pCallBack[i] = pCallBack; // 保存到数组中
m_pCallBack[i]->AddRef(); // 指针计数器 +1
*pdwCookie = i + 1; // cookie 就是数组下标
// +1 的目的是避免使用0,因为0表示无效
return S_OK;
}
}
return E_OUTOFMEMORY; // 超过10个连接,内存不够用啦
}
STDMETHODIMP CEvent1::Unadvise(long dwCookie)
{
if( dwCookie<1 || dwCookie>10 ) // 这是谁干的呀?乱给参数
return E_INVALIDARG;
if( NULL == m_pCallBack[ dwCookie - 1 ] ) // 参数错误,或该接口指针已经无效了
return E_INVALIDARG;
m_pCallBack[ dwCookie -1 ]->Release(); // 指针计数器 -1
m_pCallBack[ dwCookie -1 ] = NULL; // 空出该下标的数组元素
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -