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  }