#pragma once #import raw_method_prefix("") high_method_prefix("_") exclude("IErrorInfo") class IFileStream : public IStream { HANDLE m_hFile; public: IFileStream(LPCWSTR szFile); virtual ~IFileStream(); // This must be correctly implemented, if your handler must be a COM Object // the current implementation is NOT thread-safe long __stdcall QueryInterface(const struct _GUID &,void ** ); unsigned long __stdcall AddRef(void); unsigned long __stdcall Release(void); virtual /* [local] */ HRESULT STDMETHODCALLTYPE Write( /* [size_is][in] */ const void __RPC_FAR *pv, /* [in] */ ULONG cb, /* [out] */ ULONG __RPC_FAR *pcbWritten); //NOTE: MXXMLWriter only calls the Write method of the IStream interface, //so the remaining IStream methods are stubbed out below to NO-OPs. virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read( /* [length_is][size_is][out] */ void __RPC_FAR *pv, /* [in] */ ULONG cb, /* [out] */ ULONG __RPC_FAR *pcbRead) { return S_OK; } virtual /* [local] */ HRESULT STDMETHODCALLTYPE Seek( /* [in] */ LARGE_INTEGER dlibMove, /* [in] */ DWORD dwOrigin, /* [out] */ ULARGE_INTEGER __RPC_FAR *plibNewPosition) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE SetSize( /* [in] */ ULARGE_INTEGER libNewSize) { return S_OK; } virtual /* [local] */ HRESULT STDMETHODCALLTYPE CopyTo( /* [unique][in] */ IStream __RPC_FAR *pstm, /* [in] */ ULARGE_INTEGER cb, /* [out] */ ULARGE_INTEGER __RPC_FAR *pcbRead, /* [out] */ ULARGE_INTEGER __RPC_FAR *pcbWritten) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE Commit( /* [in] */ DWORD grfCommitFlags) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE Revert( void) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE LockRegion( /* [in] */ ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType) {return S_OK;} virtual HRESULT STDMETHODCALLTYPE UnlockRegion( /* [in] */ ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE Stat( /* [out] */ STATSTG __RPC_FAR *pstatstg, /* [in] */ DWORD grfStatFlag) { return S_OK; } virtual HRESULT STDMETHODCALLTYPE Clone( /* [out] */ IStream __RPC_FAR *__RPC_FAR *ppstm) { return S_OK; } private: ULONG m_refCnt; }; class MXFileWriter : public MSXML2::IMXWriterPtr { IFileStream *m_pFileStream; public: MXFileWriter(LPCWSTR szFile); virtual ~MXFileWriter(); SetFileLocation(LPCWSTR szFile); };