interop.go 609 B

12345678910111213141516171819202122232425
  1. //go:build windows
  2. package interop
  3. import (
  4. "syscall"
  5. "unsafe"
  6. )
  7. //go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go interop.go
  8. //sys coTaskMemFree(buffer unsafe.Pointer) = api_ms_win_core_com_l1_1_0.CoTaskMemFree
  9. func ConvertAndFreeCoTaskMemString(buffer *uint16) string {
  10. str := syscall.UTF16ToString((*[1 << 29]uint16)(unsafe.Pointer(buffer))[:])
  11. coTaskMemFree(unsafe.Pointer(buffer))
  12. return str
  13. }
  14. func Win32FromHresult(hr uintptr) syscall.Errno {
  15. if hr&0x1fff0000 == 0x00070000 {
  16. return syscall.Errno(hr & 0xffff)
  17. }
  18. return syscall.Errno(hr)
  19. }