猿问

syscall.Syscall 和 WinAPI 有问题

我正在尝试从 Window 的 API 中使用VkKeyScan,但是只要调用该函数,程序就会崩溃。我以这种方式导入和使用的其他 Window 的 API 函数没有问题。我的 syscall.Syscall 调用有问题吗?


var (

    user32, _ = syscall.LoadLibrary("user32.dll")

    vkKeyScan, _ = syscall.GetProcAddress(user32, "VkKeyScan")

)


func VkKeyScan(char byte) (int16, syscall.Errno) {

    var nargs uintptr = 1

    ret, _, callErr := syscall.Syscall(uintptr(vkKeyScan), nargs, uintptr(char), 0, 0)

    return int16(ret), callErr

}


BIG阳
浏览 253回答 1
1回答

料青山看我应如是

VkScanKey在 C 中工作,因为它#define大致是这样的:#ifdef UNICODE#   define VkScanKey VkScanKeyW#else#   define VkScanKey VkScanKeyA#endif所以VkScanKey不是真正的符号 -VkScanKeyW是,这是唯一GetProcAddress可以接受它的形式。如果您一直在进行适当的错误处理,您可能已经注意到GetProcAddress失败而不是Syscall,这可能会让您知道这个事实。
随时随地看视频慕课网APP

相关分类

Go
我要回答