Go 转到系统调用窗口
我目前正在尝试在运行中使用user32.dll EnumWindows,但似乎无法正常工作Go 转到系统调用窗口,go,system-calls,Go,System Calls,我目前正在尝试在运行中使用user32.dll EnumWindows,但似乎无法正常工作 var( user32 = syscall.NewLazyDLL("user32.dll") procEnumWindows = user32.NewProc("EnumWindows") ) func EnumWindows() int { ret, _, _ := procEnumWindows.Call( syscall.NewCallback(enumWi
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,这就是我正在做的事情?
BOOL
在WinAPI中声明为typedef int BOOL
。因此它与Go的bool
不匹配。规格甚至没有提到它的尺寸。它可能是1个字节,但没有显示。您应该改用int32
。我认为该规范这样做是有意的:特别是为了防止滥用,例如让C代码向类型为bool
的Go值写入内容,然后期望Go代码以“正确的方式”解释它。总之,您可以在运行时通过了解布尔值的大小。