/* * PROJECT: ReactOS Applications * LICENSE: LGPL - See COPYING in the top level directory * FILE: base/applications/msconfig_new/xmldomparser.cpp * PURPOSE: XML DOM Parser * COPYRIGHT: Copyright 2011-2012 Hermes BELUSCA - MAITO */ #pragma once /* * * MSXML Version Header File Name Library File Name DLL File Name * ======================================================================= * 2.x msxml.h msxml.lib msxml2.dll * 3.0 msxml2.h msxml2.lib msxml3.dll * 4.0 msxml2.h msxml2.lib msxml4.dll * 6.0 msxml6.h msxml6.lib msxml6.dll */ // #pragma comment(lib, "msxml2.lib") #include #define _COM_NO_STANDARD_GUIDS_ #include // #include // comdef.h includes comutil.h #include #include // // About macro while(0) trick : see http://cnicholson.net/2009/03/stupid-c-tricks-dowhile0-and-c4127/ // // Macro that releases a COM object if not NULL. #define SAFE_RELEASE(p) \ do { if ((p)) { (p)->Release(); (p) = NULL; } } while (0) #if 0 // IID_PPV_ARGS(ppType) // ppType is the variable of type IType that will be filled // // RESULTS in: IID_IType, ppvType // will create a compiler error if wrong level of indirection is used. // // See ObjBase.h - Only in Windows 7 SDK. #ifndef IID_PPV_ARGS extern "C++" { template void** IID_PPV_ARGS_Helper(T** pp) { static_cast(*pp); // make sure everyone derives from IUnknown return reinterpret_cast(pp); } } #define IID_PPV_ARGS(ppType) __uuidof(**(ppType)), IID_PPV_ARGS_Helper(ppType) #endif #else // See include/reactos/shellutils.h #ifdef __cplusplus # define IID_PPV_ARG(Itype, ppType) IID_##Itype, reinterpret_cast((static_cast(ppType))) # define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, reinterpret_cast((static_cast(ppType))) #else # define IID_PPV_ARG(Itype, ppType) IID_##Itype, (void**)(ppType) # define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, (void**)(ppType) #endif #endif HRESULT InitXMLDOMParser(void); void UninitXMLDOMParser(void); HRESULT CreateAndInitXMLDOMDocument(IXMLDOMDocument** ppDoc); BOOL LoadXMLDocumentFromResource(IXMLDOMDocument* pXMLDom, LPCWSTR lpszXMLResName); BOOL LoadXMLDocumentFromFile(IXMLDOMDocument* pXMLDom, LPCWSTR lpszFilename, BOOL bIgnoreErrorsIfNonExistingFile = FALSE);