robot2.cpp

来自「VC++串口通信设。本书详细说明讲解了在VC++环境下编写串口通信得过程。值得一」· C++ 代码 · 共 136 行

CPP
136
字号
#define INITGUID
#include "Robot2.h"
#include "Utility.h"
#include "resource.h"
#include <mmsystem.h>


// Sound identifiers
int g_aiSoundIds[] =
   {
      WAV_BLADDLE,
      WAV_COW,
      WAV_GAMESHOW,
      WAV_GARGLE,
      WAV_LAUGH,
      WAV_OHNO,
      WAV_OOOO,
      WAV_OUCH,
      WAV_TAXI
   };

// Constant that tracks the number of longer sounds
static const ULONG g_ulNumOtherSounds = 
   sizeof(g_aiSoundIds) / sizeof(int);


IMPLEMENT_DYNCREATE(ComNoisyRobot, CCmdTarget)

IMPLEMENT_OLECREATE(ComNoisyRobot, "NoisyRobot",
0xf8d4bfd6, 0x4277, 0x11d0, 0x8b, 0xe2, 0xad, 0x32, 0xe5, 0x41, 0xaf, 0xc);

BEGIN_INTERFACE_MAP(ComNoisyRobot, CCmdTarget)
   INTERFACE_PART(ComNoisyRobot, IID_INoise, NoiseInner)
   INTERFACE_AGGREGATE(ComNoisyRobot, m_pAggrIUnknown)
END_INTERFACE_MAP()


//
// Constructor and destructor
//

ComNoisyRobot::ComNoisyRobot()
          : m_pAggrIUnknown(NULL)
{
   VerboseMsg("In ComNoisyRobot constructor.\n");

   // Seed the random number generator
   SeedRandomGenerator();

   // Allow other components to aggregate us if they need to
   EnableAggregation();

   AfxOleLockApp();
}

ComNoisyRobot::~ComNoisyRobot()
{
   VerboseMsg("In ComNoisyRobot destructor.\n");

   // Release our aggregate
   if (m_pAggrIUnknown) {
      m_pAggrIUnknown->Release();
      m_pAggrIUnknown = NULL;
   }

   AfxOleUnlockApp();
}


//
// Virtual functions overriden from CCmdTarget
//

BOOL ComNoisyRobot::OnCreateAggregates()
{
   HRESULT    hResult;

   // Create a new Robot object to aggregate with
   VerboseMsg("Creating new Robot aggregate.\n");
   hResult = CoCreateInstance(CLSID_Robot,
                              GetControllingUnknown(),
                              CLSCTX_INPROC_SERVER,
                              IID_IUnknown,
                              (PPVOID) &m_pAggrIUnknown);
   if (FAILED(hResult)) {
      ReportError("Could not create a new Robot aggregate.", hResult);
      return FALSE;
   }

   return TRUE;
}


//
// Nested Robot IUnknown members
//

STDMETHODIMP_(ULONG) 
ComNoisyRobot::XNoiseInner::AddRef()
{
   METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
   return pThis->ExternalAddRef();
}

STDMETHODIMP_(ULONG) 
ComNoisyRobot::XNoiseInner::Release()
{
   METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
   return pThis->ExternalRelease();
}

STDMETHODIMP 
ComNoisyRobot::XNoiseInner::QueryInterface(REFIID riid, PPVOID ppv)
{
   METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
   return pThis->ExternalQueryInterface(&riid, ppv);
}


//
// INoise interface members for nested Noise class
//

STDMETHODIMP 
ComNoisyRobot::XNoiseInner::MakeNoise()
{
   METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
   VerboseMsg("In XNoiseInner::MakeNoise\n");

   PlaySound(MAKEINTRESOURCE(g_aiSoundIds[rand() % g_ulNumOtherSounds]),
             AfxGetResourceHandle(),
             SND_RESOURCE | SND_ASYNC);

   return NOERROR;
}

⌨️ 快捷键说明

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