📄 event1.cpp
字号:
// Event1.cpp : CEvent1 的实现
#include "stdafx.h"
#include "Event1.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
// +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 + -