diff options
Diffstat (limited to 'private/oleutest/cfmex/cmoniker.hxx')
-rw-r--r-- | private/oleutest/cfmex/cmoniker.hxx | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/private/oleutest/cfmex/cmoniker.hxx b/private/oleutest/cfmex/cmoniker.hxx new file mode 100644 index 000000000..7d9e1ada0 --- /dev/null +++ b/private/oleutest/cfmex/cmoniker.hxx @@ -0,0 +1,178 @@ + + +//+================================================================ +// +// File: CMoniker.hxx +// +// Purpose: This file declares the CMoniker class. +// This class manages a file moniker. +// +//+================================================================ + + +#ifndef _C_MONIKER_HXX_ +#define _C_MONIKER_HXX_ + + +// -------- +// Includes +// -------- + +#include "CDir.hxx" + +// -------- +// CMoniker +// -------- + +class CMoniker +{ + +// (De)Construction + +public: + + CMoniker(); + ~CMoniker(); + +// Public member routines. + +public: + + BOOL GetTemporaryStorageTime( FILETIME *); + BOOL Initialize( const CDirectory& cDirectoryOriginal, + const CDirectory& cDirectoryFinal ); + BOOL CreateFileMonikerEx( DWORD dwTrackFlags = 0L ); + BOOL SaveDeleteLoad(); + BOOL ComposeWith(); + BOOL Reduce( DWORD dwDelay, IMoniker** ppmkReduced = NULL ); + BOOL GetDisplayName( WCHAR * wszDisplayName, IMoniker* pmnkCaller = NULL ); + BOOL GetTimeOfLastChange( FILETIME *ft ); + BOOL BindToStorage(); + BOOL BindToObject(); + + BOOL CreateTemporaryStorage(); + BOOL RenameTemporaryStorage(); + BOOL DeleteTemporaryStorage(); + + const WCHAR * GetTemporaryStorageName() const; + IBindCtx* GetBindCtx() const; + BOOL TouchTemporaryStorage(); + HRESULT GetHResult() const; + void SuppressErrorMessages( BOOL bSuppress ); + BOOL InitializeBindContext( ); + + +// Private member routines. + +private: + + BOOL CreateLinkTrackingRegistryKey(); + BOOL OpenLinkTrackingRegistryKey(); + BOOL CloseLinkTrackingRegistryKey(); + void DisplayErrors( BOOL bSuccess, WCHAR * wszFunctionName ) const; + + +// Private data members + +private: + + WCHAR m_wszSystemTempPath[ MAX_PATH + sizeof( L'\0' ) ]; + WCHAR m_wszTemporaryStorage[ MAX_PATH + sizeof( L'\0' ) ]; + + IMoniker* m_pIMoniker; + IBindCtx* m_pIBindCtx; + IStorage* m_pIStorage; + + WCHAR m_wszErrorMessage[ 100 ]; + DWORD m_dwTrackFlags; + BOOL m_bSuppressErrorMessages; + + const CDirectory* m_pcDirectoryOriginal; + const CDirectory* m_pcDirectoryFinal; + + // The following key, along with being a usable handle, is a flag + // which indicates if we need to restore the data in the registry. + + HKEY m_hkeyLinkTracking; + + + // Note that m_hr is used for more than just HRESULTs, sometimes + // it is used for other errors as well. + + HRESULT m_hr; + +}; + + +// -------------- +// Inline Members +// -------------- + +#define OUTFILE stdout + +// CMoniker::DisplayErrors + +inline void CMoniker::DisplayErrors( BOOL bSuccess, WCHAR * wszFunctionName ) const +{ + if( !bSuccess + && + !m_bSuppressErrorMessages + ) + { + fwprintf( OUTFILE, L"Error in %s (%08x)\n %s\n", + wszFunctionName, m_hr, m_wszErrorMessage ); + } +} + +// CMoniker::GetTemporaryStorage + +inline const WCHAR * CMoniker::GetTemporaryStorageName() const +{ + return m_wszTemporaryStorage; +} + +// CMoniker::GetBindCtx + +inline IBindCtx* CMoniker::GetBindCtx() const +{ + return( m_pIBindCtx ); +} + +// CMoniker::GetHResult + +inline HRESULT CMoniker::GetHResult() const +{ + return( m_hr ); +} + +// CMoniker::SuppressErrorMessages + +inline void CMoniker::SuppressErrorMessages( BOOL bSuppress ) +{ + // Normalize to TRUE or FALSE + + m_bSuppressErrorMessages = bSuppress ? TRUE : FALSE; +} + + +// ------ +// Macros +// ------ + +#define DEFAULT_TRACK_FLAGS ( TRACK_LOCALONLY ) + +#define EXIT_ON_FAILED( error ) if( FAILED( m_hr )) \ + {\ + wcscpy( m_wszErrorMessage, ##error );\ + goto Exit;\ + } + +#undef EXIT +#define EXIT( error ) \ + {\ + wcscpy( m_wszErrorMessage, ##error );\ + goto Exit;\ + } + + +#endif // _C_MONIKER_HXX_ |