登录
首页 >  Golang >  Go问答

Syscall() 和 Call() 之间有什么区别?

来源:stackoverflow

时间:2024-03-09 12:36:26 101浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Syscall() 和 Call() 之间有什么区别?》,涉及到,有需要的可以收藏一下

问题内容

我一直在尝试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个参数。

今天关于《Syscall() 和 Call() 之间有什么区别?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>