go 调用winapi_Golang下通过syscall调用win32的api

本文介绍了如何在Golang中通过syscall包调用Windows API,特别是`GetDiskFreeSpaceEx`函数,以获取磁盘空间信息。文章详细展示了使用`syscall.Syscall`和`syscall.Call`两种方式实现,并强调了参数数量的重要性以及避免传入struct的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源于golang群中再次提到windows下获取磁盘空间的方法

由于golang的api并非完全跨平台, golang本身并没有直接提供windows下的方式

syscall.Syscall系列方法

当前共5个方法

syscall.Syscall

syscall.Syscall6

syscall.Syscall9

syscall.Syscall12

syscall.Syscall15

分别对应 3个/6个/9个/12个/15个参数或以下的调用

参数都形如

syscall.Syscall(trap, nargs, a1, a2, a3)

第二个参数, nargs 即参数的个数,一旦传错, 轻则调用失败,重者直接APPCARSH

多余的参数, 用0代替

调用示例

获取磁盘空间

//首先,准备输入参数, GetDiskFreeSpaceEx需要4个参数, 可查MSDN

dir := "C:"

lpFreeBytesAvailable := int64(0) //注意类型需要跟API的类型相符

lpTotalNumberOfBytes := int64(0)

lpTotalNumberOfFreeBytes := int64(0)

//获取方法的引用

kernel32, err := syscall.LoadLibrary("Kernel32.dll") // 严格来说需要加上 defer syscall.FreeLibrary(kernel32)

GetDiskFreeSpaceEx, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GetDis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值