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

📄 event1.cpp

📁 Thinkinc++English 电子书籍,英文版
💻 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 + -