Im в настоящее время пытаются использовать USER32.dll EnumWindows на Go, но, кажется, не работаетGo окна системный вызов вызов
var(
user32 = syscall.NewLazyDLL("user32.dll")
procEnumWindows = user32.NewProc("EnumWindows")
)
func EnumWindows() int {
ret, _, _ := procEnumWindows.Call(
syscall.NewCallback(enumWindowsProc),
uintptr(0),
)
return int(ret)
}
func enumWindowsProc(hwnd syscall.Handle, lparam uintptr) bool {
return true
}
Вызывать EnumWindows даст следующую ошибку:
panic: compileCallback: output parameter size is wrong
Я не знаю, как я должен использовать пакет syscall ... Я не могу найти достаточную документацию на нем
На странице документа MSDN говорится, что обратный вызов должен возвращать BOOL, и это то, что я делаю?
Я думаю, что спецификация делает это специально: специально для предотвращения злоупотреблений, например, для того, чтобы код C записывал что-то в значение Go типа 'bool', а затем ожидал, что код Go будет интерпретировать его« правильным способом ». В целом вы можете узнать размер логического значения во время выполнения через ['unsafe.Sizeof()'] (https://golang.org/pkg/unsafe/#Sizeof). – kostix