15#ifndef __SOBJECT_I__H__
16#define __SOBJECT_I__H__
17#include <interface/obj-ref-i.h>
18#include <interface/sstring-i.h>
19#include <interface/sxml-i.h>
22#pragma warning(disable : 4275)
26#define WIDESTR_HELPER(x) L##x
27#define WIDESTR(x) WIDESTR_HELPER(#x)
30#define DEF_OBJ_BASE(clsName, clsType) \
31 static int GetClassType() \
35 static LPCWSTR GetClassName() \
37 return WIDESTR(clsName); \
39 static LPCWSTR GetClassAlias() \
45#define DEF_OBJ_BASE(clsName, clsType)
49#define DEF_SOBJECT_EX(baseCls, clsName, clsAlise) \
51 typedef baseCls __baseCls; \
52 static LPCWSTR GetClassName() \
56 static int GetClassType() \
58 return __baseCls::GetClassType(); \
60 static LPCWSTR GetClassAlise() \
65 static LPCWSTR BaseClassName() \
67 return __baseCls::GetClassName(); \
70 virtual LPCWSTR WINAPI GetObjectClass() const \
75 virtual BOOL WINAPI IsClass(LPCWSTR lpszName) const \
77 if (wcscmp(GetClassName(), lpszName) == 0) \
79 return __baseCls::IsClass(lpszName); \
82#define DEF_SOBJECT(baseCls, clsName) DEF_SOBJECT_EX(baseCls, clsName, NULL)
84typedef struct IObject IObject;
86typedef HRESULT (*FunAttrHandler)(IObject *pObj,
const IStringW *attrName,
const IStringW *attrValue, BOOL bLoading);
88typedef enum _SObjectType
109#define INTERFACE IObject
110DECLARE_INTERFACE_(IObject,
IObjRef){ DEF_OBJ_BASE(IObject, Undef)
111#include <interface/SobjectApi.h>
123T *sobj_cast(
const IObject *pObj)
128 if (pObj->IsClass(T::GetClassName()))
Interface for reference counting.