// +build windows package ole import ( "fmt" "syscall" "unicode/utf16" ) // errstr converts error code to string. func errstr(errno int) string { // ask windows for the remaining errors var flags uint32 = syscall.FORMAT_MESSAGE_FROM_SYSTEM | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS b := make([]uint16, 300) n, err := syscall.FormatMessage(flags, 0, uint32(errno), 0, b, nil) if err != nil { return fmt.Sprintf("error %d (FormatMessage failed with: %v)", errno, err) } // trim terminating \r and \n for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- { } return string(utf16.Decode(b[:n])) }