typedef struct _PropertyInfo { LPTSTR szPropertyName; BSTR bstrOID; BSTR bstrSyntax; long lMaxRange; long lMinRange; BOOL fMultiValued; DWORD dwFlags; DWORD dwInfoLevel; DWORD dwSyntaxId; }PROPERTYINFO, *PPROPERTYINFO, *LPPROPERTYINFO; typedef struct _ClassInfo { BSTR bstrName; const GUID *pCLSID; const GUID *pPrimaryInterfaceGUID; BSTR bstrOID; BOOL fAbstract; BSTR bstrMandatoryProperties; BSTR bstrOptionalProperties; BSTR bstrPossSuperiors; BSTR bstrContainment; BOOL fContainer; BSTR bstrHelpFileName; long lHelpFileContext; PROPERTYINFO *aPropertyInfo; DWORD cPropertyInfo; } CLASSINFO; typedef struct _SyntaxInfo { BSTR bstrName; long lOleAutoDataType; } SYNTAXINFO; extern DWORD g_cNWCOMPATClasses; extern CLASSINFO g_aNWCOMPATClasses[]; extern DWORD g_cNWCOMPATSyntax; extern SYNTAXINFO g_aNWCOMPATSyntax[]; HRESULT MakeVariantFromStringList( BSTR bstrList, VARIANT *pvVariant ); class CNWCOMPATSchema; class CNWCOMPATSchema : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADs, public IADsContainer { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS NW_DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsContainer_METHODS /* Constructors, Destructors .... */ CNWCOMPATSchema::CNWCOMPATSchema(); CNWCOMPATSchema::~CNWCOMPATSchema(); static HRESULT CNWCOMPATSchema::CreateSchema( BSTR bstrParent, BSTR bstrName, CCredentials &Credentials, DWORD dwObjectState, REFIID riid, void **ppvObj ); static HRESULT CNWCOMPATSchema::AllocateSchemaObject( CNWCOMPATSchema **ppSchema ); protected: CDispatchMgr FAR * _pDispMgr; VARIANT _vFilter; CCredentials _Credentials; }; class CNWCOMPATClass : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADsClass { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS NW_DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsClass_METHODS /* Constructors, Destructors, .... */ CNWCOMPATClass::CNWCOMPATClass(); CNWCOMPATClass::~CNWCOMPATClass(); static HRESULT CNWCOMPATClass::CreateClass( BSTR bstrParent, CLASSINFO *pClassInfo, DWORD dwObjectState, REFIID riid, void **ppvObj ); static HRESULT CNWCOMPATClass::AllocateClassObject( CNWCOMPATClass **ppClass ); protected: CDispatchMgr FAR * _pDispMgr; VARIANT _vFilter; DWORD _cPropertyInfo; PROPERTYINFO *_aPropertyInfo; /* Properties */ BSTR _bstrCLSID; BSTR _bstrOID; BSTR _bstrPrimaryInterface; VARIANT_BOOL _fAbstract; VARIANT _vMandatoryProperties; VARIANT _vOptionalProperties; VARIANT _vPossSuperiors; VARIANT _vContainment; VARIANT_BOOL _fContainer; BSTR _bstrHelpFileName; long _lHelpFileContext; }; class CNWCOMPATProperty : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADsProperty { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS NW_DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsProperty_METHODS /* Constructors, Destructors, ... */ CNWCOMPATProperty::CNWCOMPATProperty(); CNWCOMPATProperty::~CNWCOMPATProperty(); static HRESULT CNWCOMPATProperty::CreateProperty( BSTR bstrParent, PROPERTYINFO *pPropertyInfo, DWORD dwObjectState, REFIID riid, void **ppvObj ); static HRESULT CNWCOMPATProperty::AllocatePropertyObject( CNWCOMPATProperty **ppProperty ); protected: CDispatchMgr FAR * _pDispMgr; /* Properties */ BSTR _bstrOID; BSTR _bstrSyntax; long _lMaxRange; long _lMinRange; VARIANT_BOOL _fMultiValued; }; class CNWCOMPATSyntax : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADsSyntax { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS NW_DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsSyntax_METHODS /* Constructors, Destructors, ... */ CNWCOMPATSyntax::CNWCOMPATSyntax(); CNWCOMPATSyntax::~CNWCOMPATSyntax(); static HRESULT CNWCOMPATSyntax::CreateSyntax( BSTR bstrParent, SYNTAXINFO *pSyntaxInfo, DWORD dwObjectState, REFIID riid, void **ppvObj ); static HRESULT CNWCOMPATSyntax::AllocateSyntaxObject( CNWCOMPATSyntax **ppSyntax ); protected: CDispatchMgr FAR * _pDispMgr; /* Properties */ long _lOleAutoDataType; };