github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/winc/w32/ole32.go (about) 1 //go:build windows 2 3 /* 4 * Copyright (C) 2019 Tad Vizbaras. All Rights Reserved. 5 * Copyright (C) 2010-2012 The W32 Authors. All Rights Reserved. 6 */ 7 package w32 8 9 import ( 10 "syscall" 11 "unsafe" 12 ) 13 14 var ( 15 modole32 = syscall.NewLazyDLL("ole32.dll") 16 17 procCoInitializeEx = modole32.NewProc("CoInitializeEx") 18 procCoInitialize = modole32.NewProc("CoInitialize") 19 procCoUninitialize = modole32.NewProc("CoUninitialize") 20 procCreateStreamOnHGlobal = modole32.NewProc("CreateStreamOnHGlobal") 21 ) 22 23 func CoInitializeEx(coInit uintptr) HRESULT { 24 ret, _, _ := procCoInitializeEx.Call( 25 0, 26 coInit) 27 28 switch uint32(ret) { 29 case E_INVALIDARG: 30 panic("CoInitializeEx failed with E_INVALIDARG") 31 case E_OUTOFMEMORY: 32 panic("CoInitializeEx failed with E_OUTOFMEMORY") 33 case E_UNEXPECTED: 34 panic("CoInitializeEx failed with E_UNEXPECTED") 35 } 36 37 return HRESULT(ret) 38 } 39 40 func CoInitialize() { 41 procCoInitialize.Call(0) 42 } 43 44 func CoUninitialize() { 45 procCoUninitialize.Call() 46 } 47 48 func CreateStreamOnHGlobal(hGlobal HGLOBAL, fDeleteOnRelease bool) *IStream { 49 stream := new(IStream) 50 ret, _, _ := procCreateStreamOnHGlobal.Call( 51 uintptr(hGlobal), 52 uintptr(BoolToBOOL(fDeleteOnRelease)), 53 uintptr(unsafe.Pointer(&stream))) 54 55 switch uint32(ret) { 56 case E_INVALIDARG: 57 panic("CreateStreamOnHGlobal failed with E_INVALIDARG") 58 case E_OUTOFMEMORY: 59 panic("CreateStreamOnHGlobal failed with E_OUTOFMEMORY") 60 case E_UNEXPECTED: 61 panic("CreateStreamOnHGlobal failed with E_UNEXPECTED") 62 } 63 64 return stream 65 }