ole32.odin 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package sys_windows
  2. foreign import "system:Ole32.lib"
  3. //objbase.h
  4. // Note(Dragos): https://learn.microsoft.com/en-us/windows/win32/api/objbase/ne-objbase-coinit makes you believe that MULTITHREADED == 3. That is wrong. See definition of objbase.h
  5. /*
  6. typedef enum tagCOINIT
  7. {
  8. COINIT_APARTMENTTHREADED = 0x2, // Apartment model
  9. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  10. // These constants are only valid on Windows NT 4.0
  11. COINIT_MULTITHREADED = COINITBASE_MULTITHREADED,
  12. COINIT_DISABLE_OLE1DDE = 0x4, // Don't use DDE for Ole1 support.
  13. COINIT_SPEED_OVER_MEMORY = 0x8, // Trade memory for speed.
  14. #endif // DCOM
  15. } COINIT;
  16. */
  17. // Where COINITBASE_MULTITHREADED == 0x00
  18. COINIT :: enum DWORD {
  19. APARTMENTTHREADED = 0x2,
  20. MULTITHREADED = 0,
  21. DISABLE_OLE1DDE = 0x4,
  22. SPEED_OVER_MEMORY = 0x8,
  23. }
  24. IUnknown_UUID_STRING :: "00000000-0000-0000-C000-000000000046"
  25. IUnknown_UUID := &IID{0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}
  26. IUnknownVtbl :: IUnknown_VTable
  27. IUnknown :: struct {
  28. using _iunknown_vtable: ^IUnknown_VTable,
  29. }
  30. IUnknown_VTable :: struct {
  31. QueryInterface: proc "system" (This: ^IUnknown, riid: REFIID, ppvObject: ^rawptr) -> HRESULT,
  32. AddRef: proc "system" (This: ^IUnknown) -> ULONG,
  33. Release: proc "system" (This: ^IUnknown) -> ULONG,
  34. }
  35. LPUNKNOWN :: ^IUnknown
  36. @(default_calling_convention="system")
  37. foreign Ole32 {
  38. CoInitialize :: proc(reserved: rawptr = nil) -> HRESULT ---
  39. CoInitializeEx :: proc(reserved: rawptr = nil, co_init: COINIT = .APARTMENTTHREADED) -> HRESULT ---
  40. CoUninitialize :: proc() ---
  41. CoCreateInstance :: proc(
  42. rclsid: REFCLSID,
  43. pUnkOuter: LPUNKNOWN,
  44. dwClsContext: DWORD,
  45. riid: REFIID,
  46. ppv: ^LPVOID,
  47. ) -> HRESULT ---
  48. CoTaskMemAlloc :: proc(cb: SIZE_T) -> rawptr ---
  49. CoTaskMemRealloc :: proc(pv: rawptr, cb: SIZE_T) -> rawptr ---
  50. CoTaskMemFree :: proc(pv: rawptr) ---
  51. CLSIDFromProgID :: proc(lpszProgID: LPCOLESTR, lpclsid: LPCLSID) -> HRESULT ---
  52. CLSIDFromProgIDEx :: proc(lpszProgID, LPCOLESTR, lpclsid: LPCLSID) -> HRESULT ---
  53. CLSIDFromString :: proc(lpsz: LPOLESTR, pclsid: LPCLSID) -> HRESULT ---
  54. IIDFromString :: proc(lpsz: LPOLESTR, lpiid: LPIID) -> HRESULT ---
  55. ProgIDFromCLSID :: proc(clsid: REFCLSID, lplpszProgID: ^LPOLESTR) -> HRESULT ---
  56. StringFromCLSID :: proc(rclsid: REFCLSID, lplpsz: ^LPOLESTR) -> HRESULT ---
  57. StringFromGUID2 :: proc(rclsid: REFCLSID, lplpsz: LPOLESTR, cchMax: INT) -> INT ---
  58. StringFromIID :: proc(rclsid: REFIID, lplpsz: ^LPOLESTR) -> HRESULT ---
  59. PropVariantClear :: proc(pvar: ^PROPVARIANT) -> HRESULT ---
  60. PropVariantCopy :: proc(pvarDest: ^PROPVARIANT, pvarSrc: ^PROPVARIANT) -> HRESULT ---
  61. FreePropVariantArray :: proc(cVariants: ULONG, rgvars: ^PROPVARIANT) -> HRESULT ---
  62. }