gpt4 book ai didi

go - Syscall()与Call()?

转载 作者:行者123 更新时间:2023-12-01 22:37:33 26 4
gpt4 key购买 nike

我一直在尝试Go和Win32,发现了用于调用OS函数的以下两种变体(代码缩写):

modUser32 = syscall.NewLazyDLL("user32.dll")
procMessageBox = modUser32.NewProc("MessageBoxW")

// 1st variant
syscall.Syscall6(procMessageBox.Addr(), 4,
uintptr(hwnd), toUtf16(msg), toUtf16(caption), uintptr(flags),
0, 0)

// 2nd variant
procMessageBox.Call(uintptr(hwnd), uintptr(hwnd),
toUtf16(msg), toUtf16(caption), uintptr(flags))

第二种变体显然更简单,但是它有什么缺点吗?

最佳答案

它们基本上没有什么区别,Syscall可能只是Call的封装层。两种变体都有参数数量的限制。

syscall.Syscall
syscall.Syscall6
syscall.Syscall9
syscall.Syscall12
syscall.Syscall15

对应于参数<= 3/6/9/12/15。
Call()方法最多包含15个参数。

关于go - Syscall()与Call()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58278819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com