[英]Syscall() vs Call()?
I've been experimenting with Go and Win32, and I found these two variants for calling OS functions (code is abbreviated):我一直在试验 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))
2nd variant is obviously simpler, but are there any disadvantages to it?第二种变体显然更简单,但它有什么缺点吗?
They basically don't make much difference, Syscall
may just be a layer of encapsulation for the Call
.它们基本上没有太大区别,
Syscall
可能只是对Call
的一层封装。 Both variants have a limit on the number of parameters.两种变体都对参数数量有限制。
syscall.Syscall
syscall.Syscall6
syscall.Syscall9
syscall.Syscall12
syscall.Syscall15
Corresponding to parameters <= 3/6/9/12/15.对应参数 <= 3/6/9/12/15。
Call()
method has up to 15 parameters. Call()
方法最多有 15 个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.