////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // // CMPNT.CPP // -------------------------------- // COMImage object implementation // // Some portions of this file adapted from Inside COM, Microsoft Press // // #include #include "iface.h" #include "server.h" #include "cmpnt.h" // {{COMASPECT_COMPONENTIMPL ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// /// /// Component COMImage implementation /// /// /// // static creation method HRESULT COMImage::CreateInstance(IUnknown* pOuterUnk, void ** ppvObject) { *ppvObject = NULL; if(NULL != pOuterUnk) { return CLASS_E_NOAGGREGATION ; } COMImage* pObj = new COMImage(); if(NULL == pObj) { return E_OUTOFMEMORY; } *ppvObject = pObj; return S_OK; } COMImage::COMImage() : m_cRef(1) { theServer.IncComponents(); m_pObj = new CImage(); } COMImage::~COMImage() { theServer.DecComponents(); } // IUnknown HRESULT __stdcall COMImage::QueryInterface(const IID& iid, void** ppv) { *ppv = NULL; // {{COMASPECT_QUERYINTERFACEHANDLER if(iid == IID_IUnknown) { *ppv = static_cast(this); } else if (iid == IID_IImageInfo) { *ppv = static_cast(this); } else if (iid == IID_IImageProcessing) { *ppv = static_cast(this); } else if (iid == IID_IPersistence) { *ppv = static_cast(this); } // }}COMASPECT_QUERYINTERFACEHANDLER else { *ppv = NULL ; return E_NOINTERFACE ; } // addref the interface reinterpret_cast(*ppv)->AddRef() ; return S_OK ; } ULONG __stdcall COMImage::AddRef() { return InterlockedIncrement(&m_cRef); } ULONG __stdcall COMImage::Release() { if(InterlockedDecrement(&m_cRef) == 0) { delete this; return 0; } return m_cRef; } //{{COMASPECT_COMPONENTINTERFACEIMPL HRESULT __stdcall COMImage::GetSize(int *Width, int *Height) { m_pObj->GetSize(Width, Height); return S_OK; } HRESULT __stdcall COMImage::GetPosition(int *X, int *Y) { m_pObj->GetPosition(X, Y); return S_OK; } HRESULT __stdcall COMImage::Rotate(int* result_arg, int AngleDegrees) { (*result_arg) = m_pObj->Rotate(AngleDegrees); return S_OK; } HRESULT __stdcall COMImage::Resize(int* result_arg, int Width, int Height) { (*result_arg) = m_pObj->Resize(Width, Height); return S_OK; } HRESULT __stdcall COMImage::Load(int* result_arg, char *Filename) { (*result_arg) = m_pObj->Load(Filename); return S_OK; } HRESULT __stdcall COMImage::Save(int* result_arg, char *Filename) { (*result_arg) = m_pObj->Save(Filename); return S_OK; } //}}COMASPECT_COMPONENTINTERFACEIMPL // }}COMASPECT_COMPONENTIMPL