#pragma once /////////////////////////////////////////////////////////////////////// // FileHdlr.h - In-Process COM file handler // // // // Jim Fawcett, CSE775 - Distributed Objects, Spring 2007 // /////////////////////////////////////////////////////////////////////// #include "resource.h" #include "FileHandler.h" #include #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA) #error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms." #endif class ATL_NO_VTABLE CFileHdlr : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: CFileHdlr() { } DECLARE_REGISTRY_RESOURCEID(IDR_FILEHDLR) BEGIN_COM_MAP(CFileHdlr) COM_INTERFACE_ENTRY(IFileHdlr) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct() { return S_OK; } void FinalRelease() { } // public: STDMETHOD(SetReadPath)(BSTR path); STDMETHOD(SetWritePath)(BSTR path); STDMETHOD(GetFiles)(SAFEARRAY ** files); STDMETHOD(PutBlock)(int size, BYTE* fileBlock); STDMETHOD(GetBlock)(int* pSize, BYTE** pFileBlock); STDMETHOD(OpenFileReader)(BSTR file); STDMETHOD(OpenFileWriter)(BSTR file); STDMETHOD(CloseFileReader)(BSTR file); STDMETHOD(CloseFileWriter)(BSTR file); private: CComBSTR _ReadPath; CComBSTR _WritePath; std::wifstream _wfs; HANDLE _hReadFile; HANDLE _hWriteFile; }; OBJECT_ENTRY_AUTO(__uuidof(FileHdlr), CFileHdlr)