aboutsummaryrefslogtreecommitdiff
path: root/include/cru/common/platform/win
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-02 23:23:23 +0800
committercrupest <crupest@outlook.com>2022-02-02 23:23:23 +0800
commit2cf2f297c00ad262ddcbe56d38fdd45dffb7e342 (patch)
tree340e02ea8e77ef153219837ca39e1e4e0b916fe6 /include/cru/common/platform/win
parent35b72a2f3215cf9644508581f0af8bde2ed753a8 (diff)
downloadcru-2cf2f297c00ad262ddcbe56d38fdd45dffb7e342.tar.gz
cru-2cf2f297c00ad262ddcbe56d38fdd45dffb7e342.tar.bz2
cru-2cf2f297c00ad262ddcbe56d38fdd45dffb7e342.zip
...
Diffstat (limited to 'include/cru/common/platform/win')
-rw-r--r--include/cru/common/platform/win/BrigdeComStream.hpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/include/cru/common/platform/win/BrigdeComStream.hpp b/include/cru/common/platform/win/BrigdeComStream.hpp
new file mode 100644
index 00000000..38b75dae
--- /dev/null
+++ b/include/cru/common/platform/win/BrigdeComStream.hpp
@@ -0,0 +1,48 @@
+#pragma once
+#include "../../PreConfig.hpp"
+#ifdef CRU_PLATFORM_WINDOWS
+
+#include "WinPreConfig.hpp"
+
+#include "../../io/Stream.hpp"
+
+#include <objidlbase.h>
+
+namespace cru::platform::win {
+class BridgeComStream : public IStream {
+ public:
+ explicit BridgeComStream(io::Stream* stream);
+
+ CRU_DELETE_COPY(BridgeComStream)
+ CRU_DELETE_MOVE(BridgeComStream)
+
+ ~BridgeComStream();
+
+ public:
+ ULONG AddRef() override;
+ ULONG Release() override;
+ HRESULT QueryInterface(REFIID riid, void** ppvObject) override;
+
+ HRESULT Read(void* pv, ULONG cb, ULONG* pcbRead) override;
+ HRESULT Write(const void* pv, ULONG cb, ULONG* pcbWritten) override;
+ HRESULT Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin,
+ ULARGE_INTEGER* plibNewPosition) override;
+ HRESULT SetSize(ULARGE_INTEGER libNewSize) override;
+ HRESULT CopyTo(IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead,
+ ULARGE_INTEGER* pcbWritten) override;
+ HRESULT Commit(DWORD grfCommitFlags) override;
+ HRESULT Revert() override;
+ HRESULT LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb,
+ DWORD dwLockType) override;
+ HRESULT UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb,
+ DWORD dwLockType) override;
+ HRESULT Stat(STATSTG* pstatstg, DWORD grfStatFlag) override;
+ HRESULT Clone(IStream** ppstm) override;
+
+ private:
+ io::Stream* stream_;
+ ULONG ref_count_;
+};
+} // namespace cru::platform::win
+
+#endif