200 lines
5.0 KiB
C++
200 lines
5.0 KiB
C++
#include <com/guidinit.hpp>
|
|
#include <com/objbase.hpp>
|
|
#include <com/iviewobj.hpp>
|
|
#include <proto/sobj.hpp>
|
|
#include <proto/guids.hpp>
|
|
#include <common/string.hpp>
|
|
#include <com/dispatch.hpp>
|
|
#include <com/com.hpp>
|
|
|
|
#pragma warning(disable:4355)
|
|
CSimpleObject::CSimpleObject(PIUnknown &unkOuter,SmartPointer<DLLServer> &server)
|
|
: mImpISimpleObject(SmartPointer<CSimpleObject>(this),unkOuter),
|
|
mImpIOleInPlaceObjectWindowless(SmartPointer<CSimpleObject>(this),unkOuter),
|
|
mImpIOleObject(SmartPointer<CSimpleObject>(this),unkOuter),
|
|
mImpIViewObject(SmartPointer<CSimpleObject>(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<CSimpleObject> &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<CSimpleObject> &backObj,PIUnknown &unkOuter)
|
|
: IOleInPlaceObjectWindowlessCmn<CSimpleObject>(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<CSimpleObject> &backObj,PIUnknown &unkOuter)
|
|
: IOleObjectCmn<CSimpleObject>(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<CSimpleObject> &backObj,PIUnknown &unkOuter)
|
|
: IViewObjectCmn<CSimpleObject>(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();
|
|
}
|