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

📄 myfilterimpl.cpp

📁 【内容简介】 本书由一流的权威撰写
💻 CPP
字号:
// MyFilterImpl.cpp : Implementation of CStockPriceFilterApp and DLL registration.

#include "stdafx.h"
#include "StockPriceFilter.h"
#include "MyFilterImpl.h"

inline bool ISNULL(IUnknown* p)
{
	return (NULL == p);
}

inline bool ISNOTNULL(IUnknown* p)
{
	return (NULL != p);
}

#define RETURNIFFAILED(hr) { if (FAILED(hr)) return hr; }

/////////////////////////////////////////////////////////////////////////////
//

static CComBSTR g_bsMETHODNAME = "NewQuote";

CMyFilterImpl::CMyFilterImpl()
{
}

CMyFilterImpl::~CMyFilterImpl()
{
	m_spColl = NULL;
	m_spFC = NULL;
}

STDMETHODIMP CMyFilterImpl::Initialize(IMultiInterfaceEventControl *pMIEC)
{
	_ASSERT (ISNULL(m_spColl));

	int nErr = 0;
	HRESULT hr = pMIEC->GetSubscriptions(__uuidof(IMyStockPriceEvent),
										 g_bsMETHODNAME,
										 0,
										 &nErr,
										 &m_spColl);
	return hr;
}

STDMETHODIMP CMyFilterImpl::PrepareToFire(REFIID riid, BSTR methodname, IFiringControl* pFC)
{
	if (NULL == pFC)
		return E_INVALIDARG;

	_ASSERT (__uuidof(IMyStockPriceEvent) == riid);
	_ASSERT (!wcsicmp(methodname, g_bsMETHODNAME));

	m_spFC = pFC;

	return S_OK;
}

STDMETHODIMP CMyFilterImpl::NewQuote(/*[in]*/ BSTR bsSymbol, /*[in]*/ double dValue)
{
	_ASSERT (ISNOTNULL(m_spFC));
	_ASSERT (ISNOTNULL(m_spColl));

	CComPtr<IEnumEventObject> spEnum;
	HRESULT hr = m_spColl->get_NewEnum(&spEnum);
	RETURNIFFAILED(hr);

	ULONG nRet = 0;
	CComPtr<IUnknown> spUnk;
	while(S_OK == (hr = spEnum->Next(1, &spUnk, &nRet))) {
		CComPtr<IEventSubscription> spSub;
		hr = spUnk->QueryInterface(&spSub);
		RETURNIFFAILED(hr);
		spUnk = NULL;

		CComVariant v;
		hr = spSub->GetPublisherProperty(CComBSTR("MyLicenseKey"), &v);
		if (FAILED(hr)) {
			continue; // not a valid subscriber
		}

		if (wcscmp(V_BSTR(&v), L"1234")) {
			continue; // not a valid subscriber
		}

		hr = m_spFC->FireSubscription(spSub);
	}

	return hr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -