home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
atl
/
beeper
/
beepobj.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-26
|
2KB
|
85 lines
// beepobj.cpp : Implementation of CBeeperApp and DLL registration.
//
// This is a part of the Active Template Library.
// Copyright (C) 1996-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
#include "prebeep.h"
#include "beeper.h"
#include "beepobj.h"
LPCOLESTR arr[] = {OLESTR("Hello"), OLESTR("World"),
OLESTR("From"), OLESTR("Beeper")};
/////////////////////////////////////////////////////////////////////////////
//
CBeeper::CBeeper()
{
m_nCnt = 0;
for (int i = 0; i < 4; i++)
m_var[i] = arr[i];
}
STDMETHODIMP CBeeper::Beep()
{
if (m_nCnt++ == 5)
{
m_nCnt = 0;
return Error(L"Too many beeps");
}
MessageBeep(0);
return S_OK;
}
STDMETHODIMP CBeeper::get_Count(long* retval)
{
if (retval == NULL)
return E_POINTER;
*retval = 4;
return S_OK;
}
STDMETHODIMP CBeeper::get_Item(long Index, BSTR* pbstr)
{
if (pbstr == NULL)
return E_POINTER;
if (Index > 4)
*pbstr = NULL;
*pbstr = SysAllocString(arr[Index-1]);
return S_OK;
}
STDMETHODIMP CBeeper::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;
}