error_windows.go 650 B

123456789101112131415161718192021222324
  1. // +build windows
  2. package ole
  3. import (
  4. "fmt"
  5. "syscall"
  6. "unicode/utf16"
  7. )
  8. // errstr converts error code to string.
  9. func errstr(errno int) string {
  10. // ask windows for the remaining errors
  11. var flags uint32 = syscall.FORMAT_MESSAGE_FROM_SYSTEM | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS
  12. b := make([]uint16, 300)
  13. n, err := syscall.FormatMessage(flags, 0, uint32(errno), 0, b, nil)
  14. if err != nil {
  15. return fmt.Sprintf("error %d (FormatMessage failed with: %v)", errno, err)
  16. }
  17. // trim terminating \r and \n
  18. for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- {
  19. }
  20. return string(utf16.Decode(b[:n]))
  21. }