Files
Work/proto/source/SOBJ.CPP
2024-08-07 09:16:27 -04:00

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();
}