简体   繁体   English

系统调用()与调用()?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM