25 lines
650 B
Go
25 lines
650 B
Go
// +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]))
|
|
}
|