CustomBuffer.h 954 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include "pch.h"
  3. #include "unknwnbase.h"
  4. #include "winrt/Windows.Storage.Streams.h"
  5. struct __declspec(uuid("905a0fef-bc53-11df-8c49-001e4fc686da")) IBufferByteAccess : ::IUnknown
  6. {
  7. virtual HRESULT __stdcall Buffer(uint8_t** value) = 0;
  8. };
  9. struct CustomBuffer : winrt::implements<CustomBuffer, winrt::Windows::Storage::Streams::IBuffer, IBufferByteAccess>
  10. {
  11. uint8_t* m_buffer;
  12. uint32_t m_length{};
  13. CustomBuffer(uint8_t *buffer, uint32_t size) :
  14. m_buffer(buffer), m_length(size)
  15. {
  16. }
  17. uint32_t Capacity() const
  18. {
  19. return m_length;
  20. }
  21. uint32_t Length() const
  22. {
  23. return m_length;
  24. }
  25. void Length(uint32_t value)
  26. {
  27. if (value > m_length)
  28. {
  29. throw winrt::hresult_invalid_argument();
  30. }
  31. m_length = value;
  32. }
  33. HRESULT __stdcall Buffer(uint8_t** value) final
  34. {
  35. *value = m_buffer;
  36. return S_OK;
  37. }
  38. };