com.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. #pragma clang diagnostic push
  4. #pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection"
  5. #ifndef COM_H_INCLUDED
  6. #define COM_H_INCLUDED
  7. typedef struct _GUID {
  8. unsigned int Data1;
  9. unsigned short Data2;
  10. unsigned short Data3;
  11. unsigned char Data4[ 8 ];
  12. } GUID;
  13. typedef GUID IID;
  14. typedef const IID* REFIID;
  15. typedef unsigned int HRESULT;
  16. typedef unsigned int DWORD;
  17. typedef DWORD ULONG;
  18. #define STDMETHODCALLTYPE
  19. #define S_OK 0x0L
  20. #define E_NOTIMPL 0x80004001L
  21. #define E_NOINTERFACE 0x80004002L
  22. #define E_POINTER 0x80004003L
  23. #define E_ABORT 0x80004004L
  24. #define E_FAIL 0x80004005L
  25. #define E_UNEXPECTED 0x8000FFFFL
  26. #define E_HANDLE 0x80070006L
  27. #define E_INVALIDARG 0x80070057L
  28. struct IUnknown
  29. {
  30. virtual HRESULT STDMETHODCALLTYPE QueryInterface(
  31. REFIID riid,
  32. void **ppvObject) = 0;
  33. virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;
  34. virtual ULONG STDMETHODCALLTYPE Release( void) = 0;
  35. };
  36. #ifdef COM_GUIDS_MATERIALIZE
  37. #define __IID_DEF(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) extern "C" const GUID IID_ ## name = {0x ## d1, 0x ## d2, 0x ## d3, \
  38. {0x ## d41, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42 } };
  39. #else
  40. #define __IID_DEF(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) extern "C" const GUID IID_ ## name;
  41. #endif
  42. #define COMINTERFACE(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) __IID_DEF(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) \
  43. struct __attribute__((annotate("uuid(" #d1 "-" #d2 "-" #d3 "-" #d41 #d42 "-" #d43 #d44 #d45 #d46 #d47 #d48 ")" ))) name
  44. #endif // COM_H_INCLUDED
  45. #pragma clang diagnostic pop