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

📄 autoincr.cpp

📁 侯捷先生翻译的书籍《Win32多线程程序设计》的源代码。
💻 CPP
字号:
/*
 * AutoIncr.cpp : Implementation of CComDemoApp and DLL registration.
 *
 * Sample code for "Multithreading Applications in Win32"
 * This is from Chapter 17
 *
 * Implements a FreeThreaded COM Object CAutoIncr
 */


#include "stdafx.h"
#include "ComDemo.h"
#include "AutoIncr.h"

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

STDMETHODIMP CAutoIncr::InterfaceSupportsErrorInfo(REFIID riid)
{
	static const IID* arr[] = 
	{
		&IID_IAutoIncr,
	};

	for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
	{
		if (InlineIsEqualGUID(*arr[i],riid))
			return S_OK;
	}
	return S_FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// User Functions start here

CAutoIncr::CAutoIncr()
{
	// Initialize Counters
	m_iValue1 = 0;
	m_iValue2 = 0;
}

STDMETHODIMP CAutoIncr::get_SlowCounter(WORD* pValue)
{
	Sleep(15000); // simulate work being done.
	if (pValue)
	{	// Return value and increase for next time
		*pValue = m_iValue1++;
		return S_OK;
	}
	return E_POINTER;
}

STDMETHODIMP CAutoIncr::get_FastCounter(WORD* pValue)
{
	Sleep(2000); // simulate work being done.
	if (pValue)
	{	// Return value and increase for next time
		*pValue = m_iValue2++;
		return S_OK;
	}
	return E_POINTER;
}

STDMETHODIMP CAutoIncr::get__NewEnum(IUnknown** retval)
{
	if (retval == NULL)
		return E_POINTER;
	*retval = NULL;
	typedef CComObject<CComEnum<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT,
		_Copy<VARIANT> > > enumvar;
	HRESULT hRes = S_OK;
	enumvar* p = new enumvar;
	if (p == NULL)
		hRes = E_OUTOFMEMORY;
	else 
	{
		hRes = p->FinalConstruct();
		if (hRes == S_OK)
		{
			hRes = p->Init(&m_var[0], &m_var[4], NULL, AtlFlagCopy);
			if (hRes == S_OK)
				hRes = p->QueryInterface(IID_IUnknown, (void**)retval);
		}
	}
	if (hRes != S_OK)
		delete p;
	return hRes;
}

⌨️ 快捷键说明

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