Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayLib::cXObjModule Class Reference

#include <cXObjModule.h>

Inheritance diagram for GrayLib::cXObjModule:
GrayLib::cXObjPack GrayLib::cXObjDef GrayLib::cXObject GrayLib::cScriptableObj IXObject Gray::cThreadLockableRef Gray::CObject Gray::cHeapObject IScriptableObj Gray::cRefBase Gray::cThreadLockStub Gray::IHeapObject IUnknown Gray::cLockableBase

Public Member Functions

 cXObjModule (const FILECHAR_t *pszPathName, cXObjModuleFactory *pFactory, HMODULE hModule)
 
virtual ~cXObjModule ()
 
bool IsValidSignature (UINT32 nGrayLibVer, size_t nSizeofThis) const
 
cOSModImplget_XObjModUnload () const
 
virtual HRESULT LoadXObjPack (IXObject *pRoot) override
 Check cached open of this file. check if it should be closed? More...
 
virtual void UnloadXObject () override
 
virtual HRESULT DisposeThis () override
 utility More...
 
virtual HRESULT InvokeMethodInt (cXObjPackChild *pEventSink, const ATOMCHAR_t *pszMethod, const cVariant &vArgs, OUT cVariant &vValRet) override
 
- Public Member Functions inherited from GrayLib::cXObjPack
virtual ~cXObjPack ()
 
virtual cStringF get_FilePath () const
 
virtual cString get_Description () const override
 
 STDMETHOD_ (XOBJTID_t, get_XObjTypeId)() const override
 
HRESULT CheckForChange ()
 modified on disk? CXOBJFILE_CHANGE_TYPE More...
 
HRESULT RegisterChildDef (cXObjDef *pChildDef)
 
bool UnregisterChildDef (cXObjDef *pChildDef)
 
virtual HRESULT InvokeMethodInt (cXObjPackChild *pEventSink, const ATOMCHAR_t *pszMethod, const cVariant &vArgs, cVariant &vValRet)
 
- Public Member Functions inherited from GrayLib::cXObjDef
virtual cScriptableInterfaceDefPtr _stdcall get_ScriptInterfaceDef () const
 
 cXObjDef (UID_t rid, cAtomRef aSymName)
 
virtual ~cXObjDef ()
 
STDMETHOD() SetObjStateLoaded ()
 extra cleanup at the end of the load. More...
 
bool hasSymName () const noexcept
 Get the SYMNAME of the resource item. (Used for saving,scripting) may be number or name. More...
 
cAtomRef get_SymNameA () const
 
 STDMETHOD_ (cStringA, get_SymName)() const override
 
STDMETHOD() put_SymName (cAtomRef aSymName, bool bOverwrite=false) override
 
HRESULT put_SymName2 (cAtomRef aSymName)
 
 STDMETHOD_ (cString, get_Name)() const override
 
virtual void put_Description (cString sDescription)
 
virtual cString get_DescriptionFull () const
 
virtual bool isResourceLoaded () const
 
virtual HRESULT LoadXObject ()
 
virtual HRESULT ReloadXObject ()
 
virtual HRESULT SaveXObject ()
 
virtual void CopyXObject (const cXObjDef *pDef)
 
virtual int get_BaseRefCount () const override
 
STDMETHOD() s_PropPut (const cScriptableProp *pProp, const cVariant &vVal) override
 
STDMETHOD() s_PropGet (const cScriptableProp *pProp, OUT cVariant &vValRet) override
 
STDMETHOD() s_Invoke (const cScriptableMethod *pMethod, const cVariant &vArgs, OUT cVariant &vValRet) override
 
STDMETHOD() s_WriteProps (IScriptableSetter &reg) override
 
virtual size_t GetHeapStats (OUT ITERATE_t &iAllocCount) const override
 allocs for all children. does NOT include sizeof(*this) More...
 
- Public Member Functions inherited from GrayLib::cXObject
 cXObject (UID_t nUID=cUID::k_CLEAR, cXObjDef *pBaseDef=nullptr)
 
virtual ~cXObject ()
 
virtual bool isValidCheck () const noexcept override
 
 STDMETHOD_ (XOBJTID_t, get_XObjTypeId)() const
 
const ATOMCHAR_tget_XObjTypeName () const
 
bool isValidUID () const noexcept
 
UID_t get_UIDValue () const noexcept
 
UID_t get_HashCode () const noexcept
 
 STDMETHOD_ (HASHCODE_t, get_HashCodeX)() const noexcept override
 
void put_UIDValuePrivate (UID_t dwIndex)
 
 STDMETHOD_ (void, put_UIDValue)(UID_t dwIndex)
 
 STDMETHOD_ (cString, get_Name)() const override
 
STDMETHOD() put_Name (cString sName)
 
 STDMETHOD_ (cString, get_NameDeco)() const
 
 STDMETHOD_ (cStringA, get_SymName)() const override
 
STDMETHOD() put_SymName (cAtomRef aSymName, bool bOverwrite=false)
 
HRESULT put_SymName2 (cAtomRef aSymName)
 
cXObjDefget_BaseDef () const
 
virtual bool put_BaseDef (cXObjDef *pDef)
 
 STDMETHOD_ (cAtomRef, get_BaseSymNameA)() const
 shortcut for symbolic name for get_BaseDef() More...
 
virtual cRefPtr< cXObjectget_ContainerObject () const
 
virtual cVariant get_ContainerVar () const
 
STDMETHOD() put_ContainerVar (const cVariant &vVal)
 
bool isMyContainer (const cXObject *pObjParent) const
 
void InitObjState ()
 
XObjState_TYPE get_ObjState () const noexcept
 
bool put_ObjState (XObjState_TYPE eObjState)
 
bool isObjStateLoading () const noexcept
 
bool isObjStateLoading1 () const noexcept
 
bool isObjStateLoaded () const noexcept
 
bool isObjStateModified () const noexcept
 
bool isObjStateDisposed () const noexcept
 
bool isObjStateBad () const noexcept
 
STDMETHOD() SetObjStateLoaded ()
 extra cleanup at the end of the load. More...
 
void SetObjStateBad ()
 
void SetObjStateModified ()
 
void ClearObjStateModified ()
 
const cTimeIntget_TimeSaved () const noexcept
 
void put_TimeSaved (cTimeInt timeSaved)
 
void UpdateTimeSaved ()
 
virtual cVarTuplePtr FindTagA (cAtomRef aTagName) const
 extra Properties/Tags More...
 
cVarTuplePtr FindTag (const ATOMCHAR_t *pszTagName) const
 
void s_WritePropsTags (IScriptableSetter &Update)
 
STDMETHOD() s_PropPut (const cScriptableProp *pProp, const cVariant &vVal) override
 
STDMETHOD() s_PropGet (const cScriptableProp *pProp, OUT cVariant &vValRet) override
 
STDMETHOD() s_Invoke (const cScriptableMethod *pMethod, const cVariant &vArgs, OUT cVariant &vValRet) override
 
STDMETHOD() s_GetByName (const ATOMCHAR_t *pszPropName, OUT cVariant &rvValRet) override
 
STDMETHOD() s_TagPut (const ATOMCHAR_t *pszTagName, const cVariant &vValSet)
 
STDMETHOD() s_TagGet (const ATOMCHAR_t *pszTagName, OUT cVariant &vValRet)
 
STDMETHOD() s_LoadProps (IScriptableEnumerator &rProps)
 
STDMETHOD() s_EventSinkAdd (cXObjDef *pXObjDef, bool bRemove=false)
 
cStringA s_PropGetDumpStr (const cScriptableProp *pProp, XOBJ_DUMP_MASK_t uFlags=0)
 Enumerate methods and props. reflection/introspection. More...
 
HRESULT s_DumpKeys (cStreamOutput &rout, XOBJ_DUMP_MASK_t uFlags, const cScriptableProp *const *ppProps, ITERATE_t iQty)
 
HRESULT s_DumpHelp (cStreamOutput &rout, const cVariant &vArgs)
 
virtual XOBJ_WEIRD_t IsWeird () const
 
virtual XOBJ_WEIRD_t FixWeird ()
 
 IUNKNOWN_DISAMBIG_R (cThreadLockableRef)
 
STDMETHOD() QueryInterface (const IID &riid, void **ppvObject) override
 
- Public Member Functions inherited from GrayLib::cScriptableObj
virtual ~cScriptableObj ()
 
 STDMETHOD_ (cScriptableInterfaceDefPtr, get_ScriptInterfaceDef)() const
 
STDMETHOD() s_PropGet (const cScriptableProp *pProp, OUT cVariant &vValRet) override
 
STDMETHOD() s_PropPut (const cScriptableProp *pProp, const cVariant &vVal) override
 
STDMETHOD() s_Invoke (const cScriptableMethod *pMethod, const cVariant &vArgs, OUT cVariant &vValRet) override
 
const cScriptablePropFindPropStr (const ATOMCHAR_t *pszPropName) const
 
const cScriptableMethodFindMethodStr (const ATOMCHAR_t *pszPropName) const
 
HRESULT s_InvokeKey (const ATOMCHAR_t *pszMethodKey, const cVariant &vArgs, OUT cVariant &vValRet)
 
 STDMETHOD_ (cVariant, s_Exec)(const ATOMCHAR_t *pszMethodKey
 
STDMETHOD() s_GetEnum (ITERATE_t i, OUT cStringA &rsPropName, OUT cVariant &rvValRet) override
 
STDMETHOD() s_GetByName (const ATOMCHAR_t *pszPropName, OUT cVariant &rvValRet) override
 
STDMETHOD() s_Put (const ATOMCHAR_t *pszPropName, const cVariant &vValSet) override
 
void s_LoadPropsCommandLine (cAppArgs &args)
 
HRESULT s_LoadPropsBase (IScriptableEnumerator &rProps)
 
HRESULT s_LoadPropVar (const ATOMCHAR_t *pszPropName, const cVariant &vVal)
 
HRESULT s_WritePropNULL (IScriptableSetter &s, const cScriptableProp *pProp)
 
HRESULT s_WriteProp (IScriptableSetter &s, const cScriptableProp *pProp)
 
HRESULT s_WritePropsClass (IScriptableSetter &s, const cScriptableInterfaceDef *pClass)
 
HRESULT s_WritePropsArray (IScriptableSetter &s, const cScriptableProp *pProps, IScriptableObj *pDefaultSkip=nullptr)
 
STDMETHOD() s_WriteProps (IScriptableSetter &s)
 
 STDMETHOD_ (cVariant, s_Get)(const ATOMCHAR_t *pszPropName)
 
cVariant s_Get (const cScriptableProp &rProp)
 
 STDMETHOD_ (cString, s_GetStr)(const ATOMCHAR_t *pszPropName)
 
 STDMETHOD_ (float, s_GetFloat)(const ATOMCHAR_t *pszPropName)
 
STDMETHOD() GetTypeInfoCount (UINT *pctinfo)
 
- Public Member Functions inherited from Gray::cThreadLockableRef
 cThreadLockableRef (int iStaticRefCount=0) noexcept
 
virtual ~cThreadLockableRef ()
 
virtual void onThreadLockFail (TIMESYSD_t dwWaitMS)
 
- Public Member Functions inherited from Gray::cRefBase
 cRefBase (int iRefCount=0) noexcept
 
virtual ~cRefBase ()
 
int get_RefCount () const noexcept
 
HASHCODE_t get_HashCode () const noexcept
 
 STDMETHOD_ (HASHCODE_t, get_HashCodeX)() const noexcept
 
virtual void onFinalRelease ()
 
bool isValidObj () const noexcept
 
 STDMETHOD_ (ULONG, AddRef)(void) override
 
 STDMETHOD_ (ULONG, Release)(void) override
 
STDMETHOD() QueryInterface (const IID &riid, void __RPC_FAR *__RPC_FAR *ppvObject) override
 
void IncRefCount ()
 
void DecRefCount ()
 
bool isStaticConstruct () const noexcept
 
void StaticConstruct ()
 
void StaticDestruct ()
 
bool isDestructing () noexcept
 
void SetDestructing ()
 
- Public Member Functions inherited from Gray::cThreadLockStub
THREADID_t get_ThreadLockOwner () const
 
- Public Member Functions inherited from Gray::CObject
virtual ~CObject ()
 
virtual void AssertValid () const
 < memory allocation and structure definitions are valid. More...
 
virtual void Serialize (cArchive &a)
 
- Public Member Functions inherited from Gray::cHeapObject
 cHeapObject ()
 
virtual ~cHeapObject ()
 
bool IsValidInsideN (INT_PTR index) const
 
bool IsValidInsidePtr (void const *pTest) const
 
virtual size_t GetHeapStatsThis (OUT ITERATE_t &iAllocCount) const
 

Additional Inherited Members

- Public Types inherited from GrayLib::cXObjDef
enum  P_TYPE_ { P_QTY }
 
enum  M_TYPE_ { M_QTY }
 
typedef cXObject CSCRIPTABLE_SUPER_t
 
- Public Types inherited from GrayLib::cXObject
enum  P_TYPE_ { P_QTY }
 
enum  M_TYPE_ { M_QTY }
 base methods that all objects have. More...
 
- Static Public Member Functions inherited from GrayLib::cXObjPack
static cStringA GRAYCALL MakeSymNameFromPath (const FILECHAR_t *pszFilePath)
 
- Static Public Member Functions inherited from GrayLib::cXObjDef
static cAtomRef GRAYCALL MakeSymName (const ATOMCHAR_t *pszTypeName, ITERATE_t iEnum)
 
- Static Public Member Functions inherited from GrayLib::cScriptableObj
static HRESULT GRAYCALL CopyAllProps (IScriptableSetter *pObjDest, IScriptableEnumerator &rProps, int iStart=0)
 
- Public Attributes inherited from GrayLib::cXObjPack
cFileStatus m_Attr
 Compare to see if this has changed. More...
 
cStringF m_sFilePath
 full file path. More...
 
bool m_bDisabled
 disable all stuff from this file. for debug. More...
 
cXObjPackFactorym_pFactory
 factory for this type of file. More...
 
- Public Attributes inherited from GrayLib::cXObjDef
 CHEAPOBJECT_IMPL
 
TIMESYS_t m_timeLastUsed
 system time when last used. for caching More...
 
- Public Attributes inherited from GrayLib::cXObject
cVarMap m_TagMap
 attach extra tags here. (e.g. properties that don't apply to all instances. ASSUME NO OVERLAP with defined props.) More...
 
- Public Attributes inherited from GrayLib::cScriptableObj
const cVariantvArgs = cVariant::k_VarNULL)
 
- Static Public Attributes inherited from GrayLib::cXObjPack
static const ATOMCHAR_t k_szSymNamePrefix [] = CATOM_STR("pkg_")
 SymName prefix e.g. "pkg_". More...
 
static const XOBJTID_t k_XObjTypeId = ((DWORD)(BYTE)( 'P' ) | ((DWORD)(BYTE)( 'a' ) << 8) | ((DWORD)(BYTE)( 'k' ) << 16) | ((DWORD)(BYTE)( 'g' ) << 24 ))
 
static cXObjTypeDef sm_XObjTypeDef = { cXObjPack::k_XObjTypeId, "cXObjPack", 0, nullptr, "cXObjPack Object", nullptr }
 
- Static Public Attributes inherited from GrayLib::cXObjDef
static cScriptableInterfaceDef sm_ScriptInterfaceDef
 
static cScriptableProp sm_Props [P_QTY+1]
 
static cScriptableMethod sm_Methods [M_QTY+1]
 
- Static Public Attributes inherited from GrayLib::cXObject
static cScriptableInterfaceDef sm_ScriptInterfaceDef
 
static cScriptableProp sm_Props [P_QTY+1]
 
static cScriptableMethod sm_Methods [M_QTY+1]
 
static ITERATE_t sm_iLoadingCount = 0
 are we loading ? LoadXObject() reentrant ? More...
 
- Protected Member Functions inherited from GrayLib::cXObjPack
 cXObjPack (cStringF sFilePath, cXObjPackFactory *pFactory)
 
- Protected Member Functions inherited from Gray::cLockableBase
 cLockableBase () noexcept
 
 ~cLockableBase ()
 
LONG get_LockCount () const
 
bool isLocked () const
 
void IncLockCount ()
 
LONG DecLockCount ()
 
void Lock ()
 
LONG Unlock ()
 
- Protected Member Functions inherited from Gray::cHeapObject
const void * get_HeapPtr () const noexcept override
 Get the top level (outermost, freeable) class pointer. I can delete get_HeapPtr(). More...
 
- Protected Attributes inherited from GrayLib::cXObjPack
cArrayRef< cXObjDefm_aLinkedChildren
 usually cXObjDef is cXObjPackChild. More...
 
- Protected Attributes inherited from GrayLib::cXObject
 CHEAPOBJECT_IMPL
 
cRefPtr< cXObjDefm_pBaseDef
 This XObject is based on a template of other XObject/XObjDef. overloads it's props via m_TagMap. More...
 

Detailed Description

A plug-in DLL/SO/Module for this app. Similar but not the same as the COM DllRegisterServer function (DllRegisterServer) This can extend the cXObjMgr via IXObjModPlugin. Or extend other GrayLib systems. (e.g. Image,SQL)

Constructor & Destructor Documentation

◆ cXObjModule()

GrayLib::cXObjModule::cXObjModule ( const FILECHAR_t pszPathName,
cXObjModuleFactory pFactory,
HMODULE  hModule 
)

Call into the DLL asking it to register all its objects and services. ASSUME the DLL/SO/Module we are calling also shares the same GrayLib we do/are and exposes COSMod_RegisterModuleC.

◆ ~cXObjModule()

GrayLib::cXObjModule::~cXObjModule ( )
virtual

Member Function Documentation

◆ DisposeThis()

HRESULT GrayLib::cXObjModule::DisposeThis ( void  )
overridevirtual

utility

detach my children etc.

Unloading the DLL maybe at normal run time.

Note
All child objects in a DLL must be destroyed! since code links will be lost!

Pre-destructor cleanup things can be done since virtuals don't work in destructors.

Note
since this is reference counted it should be deleted in onFinalRelease()

Destroy this object even though there may be references to it. indicate to anyone who looks that this is a deleted object ? Pre-destructor cleanup things can be done since virtuals don't work in destructors.

Note
since this is reference counted it is actually deleted in onFinalRelease()
This is similar to the .NET Dispose() function DEBUG_CHECK( get_ObjState() == XObjState_Disposing );

Reimplemented from GrayLib::cXObjPack.

◆ get_XObjModUnload()

cOSModImpl* GrayLib::cXObjModule::get_XObjModUnload ( ) const
inline

Associated with cOSModImpl.

◆ InvokeMethodInt()

HRESULT GrayLib::cXObjModule::InvokeMethodInt ( cXObjPackChild pEventSink,
const ATOMCHAR_t pszMethod,
const cVariant vArgs,
OUT cVariant vValRet 
)
overridevirtual

Call the DLL method. Called only from cXObjEventSink

  • pEventSink = some object created inside this DLL.

◆ IsValidSignature()

bool GrayLib::cXObjModule::IsValidSignature ( UINT32  nGrayLibVer,
size_t  nSizeofThis 
) const
inline

Must be agreed to by all users. sizeof(cXObjModule) for checking alignments of structures. Ensure that some external DLL/SO caller has the same structure packing that we have.

◆ LoadXObjPack()

HRESULT GrayLib::cXObjModule::LoadXObjPack ( IXObject pRoot)
overridevirtual

Check cached open of this file. check if it should be closed?

Try to connect to the COSMod_RegisterModuleC for the DLL/SO.

  • pRoot = some alternate root for loading this file. normally just use this (cXObjPack) as the root?

Reimplemented from GrayLib::cXObjPack.

◆ UnloadXObject()

void GrayLib::cXObjModule::UnloadXObject ( )
overridevirtual
Note
A DLL must be Disposed in order to be TRULY unloaded! Assume the resource will be re-loaded later on demand ?

Reimplemented from GrayLib::cXObjPack.


The documentation for this class was generated from the following files: