interop.go 683 B

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