// Spaceship.cpp : implementation file // #include "stdafx.h" #include "ex24b.h" #include "Interface.h" #include "Spaceship.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////// // CSpaceship // {692D03A4-C689-11CE-B337-88EA36DE9E4E} static const IID IID_IMotion = { 0x692d03a4, 0xc689, 0x11ce, { 0xb3, 0x37, 0x88, 0xea, 0x36, 0xde, 0x9e, 0x4e } }; // {692D03A5-C689-11CE-B337-88EA36DE9E4E} static const IID IID_IVisual = { 0x692d03a5, 0xc689, 0x11ce, { 0xb3, 0x37, 0x88, 0xea, 0x36, 0xde, 0x9e, 0x4e } }; IMPLEMENT_DYNCREATE(CSpaceship, CCmdTarget) CSpaceship::CSpaceship() { TRACE("CSpaceship ctor\n"); m_nPosition = 100; m_nAcceleration = 101; m_nColor = 102; // To keep the application running as long as an OLE automation // object is active, the constructor calls AfxOleLockApp. AfxOleLockApp(); } CSpaceship::~CSpaceship() { TRACE("CSpaceship dtor\n"); // To terminate the application when all objects created with // OLE automation, the destructor calls AfxOleUnlockApp. AfxOleUnlockApp(); } void CSpaceship::OnFinalRelease() { // When the last reference for an automation object is released // OnFinalRelease is called. This implementation deletes the // object. Add additional cleanup required for your object before // deleting it from memory. delete this; } BEGIN_MESSAGE_MAP(CSpaceship, CCmdTarget) //{{AFX_MSG_MAP(CSpaceship) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() BEGIN_INTERFACE_MAP(CSpaceship, CCmdTarget) INTERFACE_PART(CSpaceship, IID_IMotion, Motion) INTERFACE_PART(CSpaceship, IID_IVisual, Visual) END_INTERFACE_MAP() // {692D03A3-C689-11CE-B337-88EA36DE9E4E} IMPLEMENT_OLECREATE(CSpaceship, "Spaceship", 0x692d03a3, 0xc689, 0x11ce, 0xb3, 0x37, 0x88, 0xea, 0x36, 0xde, 0x9e, 0x4e) STDMETHODIMP_(ULONG) CSpaceship::XMotion::AddRef() { TRACE("CSpaceship::XMotion::AddRef\n"); METHOD_PROLOGUE(CSpaceship, Motion) return pThis->ExternalAddRef(); } STDMETHODIMP_(ULONG) CSpaceship::XMotion::Release() { TRACE("CSpaceship::XMotion::Release\n"); METHOD_PROLOGUE(CSpaceship, Motion) return pThis->ExternalRelease(); } STDMETHODIMP CSpaceship::XMotion::QueryInterface( REFIID iid, LPVOID* ppvObj) { ITrace(iid, "CSpaceship::XMotion::QueryInterface"); METHOD_PROLOGUE(CSpaceship, Motion) return pThis->ExternalQueryInterface(&iid, ppvObj); } STDMETHODIMP_(void) CSpaceship::XMotion::Fly() { TRACE("CSpaceship::XMotion::Fly\n"); METHOD_PROLOGUE(CSpaceship, Motion) TRACE("m_nPosition = %d\n", pThis->m_nPosition); TRACE("m_nAcceleration = %d\n", pThis->m_nAcceleration); return; } STDMETHODIMP_(int&) CSpaceship::XMotion::GetPosition() { TRACE("CSpaceship::XMotion::GetPosition\n"); METHOD_PROLOGUE(CSpaceship, Motion) TRACE("m_nPosition = %d\n", pThis->m_nPosition); TRACE("m_nAcceleration = %d\n", pThis->m_nAcceleration); return pThis->m_nPosition; } ////////////////////////////////////////////////////////////////////// STDMETHODIMP_(ULONG) CSpaceship::XVisual::AddRef() { TRACE("CSpaceship::XVisual::AddRef\n"); METHOD_PROLOGUE(CSpaceship, Visual) return pThis->ExternalAddRef(); } STDMETHODIMP_(ULONG) CSpaceship::XVisual::Release() { TRACE("CSpaceship::XVisual::Release\n"); METHOD_PROLOGUE(CSpaceship, Visual) return pThis->ExternalRelease(); } STDMETHODIMP CSpaceship::XVisual::QueryInterface( REFIID iid, LPVOID* ppvObj) { ITrace(iid, "CSpaceship::XVisual::QueryInterface"); METHOD_PROLOGUE(CSpaceship, Visual) return pThis->ExternalQueryInterface(&iid, ppvObj); } STDMETHODIMP_(void) CSpaceship::XVisual::Display() { TRACE("CSpaceship::XVisual::Display\n"); METHOD_PROLOGUE(CSpaceship, Visual) TRACE("m_nPosition = %d\n", pThis->m_nPosition); TRACE("m_nColor = %d\n", pThis->m_nColor); } ////////////////////////////////////////////////////////////////////// void ITrace(REFIID iid, const char* str) { OLECHAR* lpszIID; ::StringFromIID(iid, &lpszIID); CString strTemp = (LPCWSTR) lpszIID; TRACE("%s - %s\n", (const char*) strTemp, (const char*) str); AfxFreeTaskMem(lpszIID); } ////////////////////////////////////////////////////////////////////// // CSpaceship message handlers