/***************************************************************************** * * ftpglob.h - HGLOBAL babysitting * * Included from ftpview.h * *****************************************************************************/ #ifndef _FTPGLOB_H #define _FTPGLOB_H /***************************************************************************** * * This is the generic IUnknown wrapper that GlobalFree's its * charge when released. * *****************************************************************************/ /***************************************************************************** * * CFtpGlob * * CFtpGlob is used as the punkForRelease when we hand a shared HGLOBAL * out to somebody else. We can't simply use the DataObject itself, * because that would result in havoc if the DataObject itself decided * to free the HGLOBAL while there were still outstanding references to it. * * It's also used when we need a refcounted string. Just put the * string into the hglob and have fun. * *****************************************************************************/ class CFtpGlob : public IUnknown { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); public: CFtpGlob(); ~CFtpGlob(void); // Public Member Functions HRESULT SetHGlob(HGLOBAL hglob) {m_hglob = hglob; return S_OK;}; HGLOBAL GetHGlob(void) {return m_hglob;}; LPCTSTR GetHGlobAsTCHAR(void) {return (LPCTSTR) m_hglob;}; // Friend Functions friend IUnknown * CFtpGlob_Create(HGLOBAL hglob); friend CFtpGlob * CFtpGlob_CreateStr(LPCTSTR pszStr); protected: // Private Member Variables int m_cRef; HGLOBAL m_hglob; // The HGLOBAL we are babysitting }; #endif // _FTPGLOB_H