// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) Microsoft Corporation. All rights reserved #pragma once #include #include "tedutil.h" #include "resource.h" class CXMLDataSaver : public IDispatchImpl , public CComObjectRoot , public CComCoClass { public: CXMLDataSaver(); virtual ~CXMLDataSaver(); BEGIN_COM_MAP(CXMLDataSaver) COM_INTERFACE_ENTRY(ITedDataSaver) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_XMLDATASAVER); DECLARE_CLASSFACTORY(); HRESULT STDMETHODCALLTYPE Init(LPCWSTR docName); HRESULT STDMETHODCALLTYPE BeginSaveObject(LPCWSTR strName); HRESULT STDMETHODCALLTYPE BeginSaveChildObjects(); HRESULT STDMETHODCALLTYPE EndSaveChildObjects(); HRESULT STDMETHODCALLTYPE SaveData(LPCWSTR strName, LPCWSTR strValue); HRESULT STDMETHODCALLTYPE SaveToFile(LPCWSTR fileName); protected: typedef struct _SaveContext { CComPtr m_spRootNode; CComPtr m_spCurrObjNode; } SaveContext; private: CComPtr m_spXMLDoc; CComPtr m_spRootNode; CComPtr m_spCurrObjNode; CAtlArray m_arrSaveContexts; }; class CXMLDataLoader : public IDispatchImpl , public CComObjectRoot , public CComCoClass { public: CXMLDataLoader(); ~CXMLDataLoader(); BEGIN_COM_MAP(CXMLDataLoader) COM_INTERFACE_ENTRY(ITedDataLoader) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID(IDR_XMLDATALOADER); DECLARE_CLASSFACTORY(); HRESULT STDMETHODCALLTYPE HasNextObject(BOOL* pfHasNextObject); HRESULT STDMETHODCALLTYPE GetNextObject(__out LPWSTR* strName); HRESULT STDMETHODCALLTYPE HasChildObjects(BOOL* pfHasChildObjects); HRESULT STDMETHODCALLTYPE BeginLoadChildObjects(); HRESULT STDMETHODCALLTYPE EndLoadChildObjects(); HRESULT STDMETHODCALLTYPE LoadData(LPCWSTR strName, __out LPWSTR* strValue, long nIndex = 0); HRESULT STDMETHODCALLTYPE LoadFromFile(LPCWSTR fileName, LPCWSTR docName); const static HRESULT E_NODE_NOT_FOUND; const static HRESULT E_STRING_TOO_LONG; protected: HRESULT LoadNextObject(); typedef struct _LoadContext { CComPtr m_spObjectList; CComPtr m_spCurrObjNode; CComPtr m_spNextObjNode; } LoadContext; private: CComPtr m_spXMLDoc; CComPtr m_spRootNode; CComPtr m_spObjectList; CComPtr m_spCurrObjNode; CComPtr m_spNextObjNode; CAtlArray m_arrLoadContexts; const static UINT MAX_STRING_LENGTH; };