猿问

转到系统调用调用窗口

我目前正在尝试在 Go 上使用 user32.dll EnumWindows 但似乎不起作用


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,这就是我在做什么?


慕森王
浏览 156回答 1
1回答

米琪卡哇伊

BOOL在 WinAPI 中声明为typedef int BOOL. 所以它不匹配 Go 的bool. 规格甚至没有提到它的尺寸是多少。它可能是 1 个字节,但它没有说出来。你应该int32改用。
随时随地看视频慕课网APP

相关分类

Go
我要回答