#include #include #include #include #include #include #include #include #pragma warning(disable:4355) CSimpleObject::CSimpleObject(PIUnknown &unkOuter,SmartPointer &server) : mImpISimpleObject(SmartPointer(this),unkOuter), mImpIOleInPlaceObjectWindowless(SmartPointer(this),unkOuter), mImpIOleObject(SmartPointer(this),unkOuter), mImpIViewObject(SmartPointer(this),unkOuter), mRefCount(0), mUnkOuter(unkOuter), mDLLServer(server), mIIDLib("c:\\work\\proto\\msvcobj\\guids.txt") { } CSimpleObject::~CSimpleObject() { } HRESULT __stdcall CSimpleObject::QueryInterface(REFIID riid,PPVOID ppv) { HRESULT hr(E_NOINTERFACE); *ppv=0; if(IID_IUnknown==riid)*ppv=(IUnknown*)this; else if(IID_ISimpleObject==riid)*ppv=&mImpISimpleObject; else if(IID_IDispatch==riid)*ppv=(IDispatch*)&mImpISimpleObject,Message::message("CSimpleObject::QueryInterface(IID_IDispatch)"); else if(IID_IOleInPlaceObjectWindowless==riid)*ppv=(IOleInPlaceObjectWindowless*)&mImpIOleInPlaceObjectWindowless,Message::message("CSimpleObject::QueryInterface(IID_IOleInPlaceObjectWindowless)"); else if(IID_IOleInPlaceObject==riid)*ppv=(IOleInPlaceObject*)&mImpIOleInPlaceObjectWindowless,Message::message("CSimpleObject::QueryInterface(IID_IOleInPlaceObject)"); else if(IID_IOleObject==riid)*ppv=(IOleObject*)&mImpIOleObject,Message::message("CSimpleObject::QueryInterface(IID_IOleObject)"); else if(IID_IViewObject==riid)*ppv=(IViewObject*)&mImpIViewObject,Message::message("CSimpleObject::QueryInterface(IID_IViewObject)"); else if(IID_IViewObject2==riid)*ppv=(IViewObject2*)&mImpIViewObject,Message::message("CSimpleObject::QueryInterface(IID_IViewObject)"); else { #if 0 String strInterface; String strLiteral; if(mIIDLib.haveIID(riid,strInterface,strLiteral))Message::message(strInterface+String(" ")+strLiteral+String("(E_NOINTERFACE)")); else Message::message((String)SysGUID(riid)+String("E_NOINTERFACE")); #endif } if(0==*ppv)return E_NOINTERFACE; AddRef(); return NOERROR; } ULONG __stdcall CSimpleObject::AddRef(void) { mRefCount++; return mRefCount; } ULONG __stdcall CSimpleObject::Release(void) { mRefCount--; if(0==mRefCount) { if(mDLLServer.isOkay())mDLLServer->removeObject(); mRefCount++; ::delete this; } return mRefCount; } HRESULT __stdcall CSimpleObject::setByte(BYTE someByte) { return S_OK; } //HRESULT __stdcall CSimpleObject::windowProcedure(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) //{ // return S_OK; //} // ***** CImpISimpleObject::CImpISimpleObject(SmartPointer &pBackObj,PIUnknown &pUnkOuter) : mRefCount(0), mBackObj(pBackObj) { if(!pUnkOuter.isOkay())mUnkOuter=pBackObj; else mUnkOuter=pUnkOuter; } CImpISimpleObject::~CImpISimpleObject() { } HRESULT __stdcall CImpISimpleObject::QueryInterface(REFIID riid,PPVOID ppv) { return mUnkOuter->QueryInterface(riid,ppv); } ULONG __stdcall CImpISimpleObject::AddRef(void) { mRefCount++; return mUnkOuter->AddRef(); } ULONG __stdcall CImpISimpleObject::Release(void) { mRefCount--; return mUnkOuter->Release(); } HRESULT __stdcall CImpISimpleObject::setByte(BYTE someBYTE) { return NOERROR; } // ******************************** CImpIOleInPlaceObjectWindowless::CImpIOleInPlaceObjectWindowless(SmartPointer &backObj,PIUnknown &unkOuter) : IOleInPlaceObjectWindowlessCmn(backObj,unkOuter) { } CImpIOleInPlaceObjectWindowless::~CImpIOleInPlaceObjectWindowless() { } HRESULT __stdcall CImpIOleInPlaceObjectWindowless::QueryInterface(REFIID riid,PPVOID ppv) { return mUnkOuter->QueryInterface(riid,ppv); } ULONG __stdcall CImpIOleInPlaceObjectWindowless::AddRef(void) { mRefCount++; return mUnkOuter->AddRef(); } ULONG __stdcall CImpIOleInPlaceObjectWindowless::Release(void) { mRefCount--; return mUnkOuter->Release(); } // ************************************* CImpIOleObject::CImpIOleObject(SmartPointer &backObj,PIUnknown &unkOuter) : IOleObjectCmn(backObj,unkOuter) { } CImpIOleObject::~CImpIOleObject() { } HRESULT __stdcall CImpIOleObject::QueryInterface(REFIID riid,PPVOID ppv) { return mUnkOuter->QueryInterface(riid,ppv); } ULONG __stdcall CImpIOleObject::AddRef(void) { mRefCount++; return mUnkOuter->AddRef(); } ULONG __stdcall CImpIOleObject::Release(void) { mRefCount--; return mUnkOuter->Release(); } // ********************************************************** CImpIViewObject::CImpIViewObject(SmartPointer &backObj,PIUnknown &unkOuter) : IViewObjectCmn(backObj,unkOuter) { } CImpIViewObject::~CImpIViewObject() { } HRESULT __stdcall CImpIViewObject::QueryInterface(REFIID riid,PPVOID ppv) { return mUnkOuter->QueryInterface(riid,ppv); } ULONG __stdcall CImpIViewObject::AddRef(void) { mRefCount++; return mUnkOuter->AddRef(); } ULONG __stdcall CImpIViewObject::Release(void) { mRefCount--; return mUnkOuter->Release(); }