You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.8 KiB
175 lines
4.8 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995
|
|
//
|
|
// File: machine.h
|
|
//
|
|
// Contents: IConnectedMachine class definition
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
//****************************************************************************
|
|
//
|
|
// Forward declarations
|
|
//
|
|
//****************************************************************************
|
|
|
|
class CMTScript;
|
|
class CScriptHost;
|
|
|
|
//****************************************************************************
|
|
//
|
|
// Classes
|
|
//
|
|
//****************************************************************************
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CMachine (cm)
|
|
//
|
|
// Purpose: Contains all useful info about a machine and what it's
|
|
// doing.
|
|
//
|
|
// Notes: This class is manipulated from multiple threads. All
|
|
// member functions must be thread safe!
|
|
//
|
|
// This is the class that is created by the class factory and
|
|
// handed out as a remote object to other machines. It has no
|
|
// real code in itself but merely provides a way to talk to the
|
|
// already running script engines.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CMachine : public CThreadComm,
|
|
public IConnectedMachine,
|
|
public IConnectionPointContainer
|
|
{
|
|
friend class CMachConnectPoint;
|
|
|
|
public:
|
|
DECLARE_MEMCLEAR_NEW_DELETE();
|
|
|
|
CMachine(CMTScript *pMT, ITypeInfo *pTIMachine);
|
|
~CMachine();
|
|
|
|
DECLARE_STANDARD_IUNKNOWN(CMachine);
|
|
|
|
// IDispatch interface
|
|
|
|
STDMETHOD(GetTypeInfoCount)(UINT FAR* pctinfo);
|
|
|
|
STDMETHOD(GetTypeInfo)(
|
|
UINT itinfo,
|
|
LCID lcid,
|
|
ITypeInfo FAR* FAR* pptinfo);
|
|
|
|
STDMETHOD(GetIDsOfNames)(
|
|
REFIID riid,
|
|
OLECHAR FAR* FAR* rgszNames,
|
|
UINT cNames,
|
|
LCID lcid,
|
|
DISPID FAR* rgdispid);
|
|
|
|
STDMETHOD(Invoke)(
|
|
DISPID dispidMember,
|
|
REFIID riid,
|
|
LCID lcid,
|
|
WORD wFlags,
|
|
DISPPARAMS FAR* pdispparams,
|
|
VARIANT FAR* pvarResult,
|
|
EXCEPINFO FAR* pexcepinfo,
|
|
UINT FAR* puArgErr);
|
|
|
|
// IConnectionPointContainer methods
|
|
|
|
STDMETHOD(EnumConnectionPoints)(LPENUMCONNECTIONPOINTS*);
|
|
STDMETHOD(FindConnectionPoint)(REFIID, LPCONNECTIONPOINT*);
|
|
|
|
// IConnectedMachine interface
|
|
|
|
STDMETHOD(Exec)(BSTR bstrCmd, BSTR bstrParams, VARIANT *pvData);
|
|
|
|
STDMETHOD(get_PublicData)(VARIANT *pvData);
|
|
STDMETHOD(get_Name)(BSTR *pbstrName);
|
|
STDMETHOD(get_Platform)(BSTR *pbstrPlat);
|
|
STDMETHOD(get_OS)(BSTR *pbstrOS);
|
|
STDMETHOD(get_MajorVer)(long *plMajorVer);
|
|
STDMETHOD(get_MinorVer)(long *plMinorVer);
|
|
STDMETHOD(get_BuildNum)(long *plBuildNum);
|
|
STDMETHOD(get_PlatformIsNT)(VARIANT_BOOL *pfIsNT);
|
|
STDMETHOD(get_ServicePack)(BSTR *pbstrSP);
|
|
STDMETHOD(get_HostMajorVer)(long *plMajorVer);
|
|
STDMETHOD(get_HostMinorVer)(long *plMajorVer);
|
|
STDMETHOD(get_StatusValue)(long nIndex, long *pnStatus);
|
|
|
|
HRESULT FireScriptNotify(BSTR bstrIdent, VARIANT vInfoF);
|
|
|
|
#define LOCK_MACH_LOCALS(pObj) CMachLock local_lock(pObj);
|
|
|
|
protected:
|
|
virtual BOOL Init();
|
|
virtual DWORD ThreadMain();
|
|
|
|
BOOL HandleThreadMessage();
|
|
|
|
private:
|
|
class CMachLock
|
|
{
|
|
public:
|
|
CMachLock(CMachine *pThis);
|
|
~CMachLock();
|
|
|
|
private:
|
|
CMachine *_pThis;
|
|
};
|
|
friend class CMachLock;
|
|
|
|
CMTScript * _pMT;
|
|
ITypeInfo * _pTypeInfoIMachine;
|
|
|
|
CRITICAL_SECTION _cs;
|
|
CStackPtrAry<IDispatch*, 5> _aryDispSink;
|
|
};
|
|
|
|
inline
|
|
CMachine::CMachLock::CMachLock(CMachine *pThis)
|
|
: _pThis(pThis)
|
|
{
|
|
EnterCriticalSection(&_pThis->_cs);
|
|
}
|
|
|
|
inline
|
|
CMachine::CMachLock::~CMachLock()
|
|
{
|
|
LeaveCriticalSection(&_pThis->_cs);
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CMachConnectPoint (mcp)
|
|
//
|
|
// Purpose: Implements IConnectionPoint for CMachine
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CMachConnectPoint : public IConnectionPoint
|
|
{
|
|
public:
|
|
|
|
CMachConnectPoint(CMachine *pMach);
|
|
~CMachConnectPoint();
|
|
|
|
DECLARE_STANDARD_IUNKNOWN(CMachConnectPoint);
|
|
|
|
STDMETHOD(GetConnectionInterface)(IID * pIID);
|
|
STDMETHOD(GetConnectionPointContainer)(IConnectionPointContainer ** ppCPC);
|
|
STDMETHOD(Advise)(LPUNKNOWN pUnkSink, DWORD * pdwCookie);
|
|
STDMETHOD(Unadvise)(DWORD dwCookie);
|
|
STDMETHOD(EnumConnections)(LPENUMCONNECTIONS * ppEnum);
|
|
|
|
CMachine *_pMachine;
|
|
};
|
|
|