我坚持使用GetSystemTimes函数。C++ 代码没有任何问题,但是使用 golang 我得到三个 nil 而不是预期值
我的代码:
package main
import (
"log"
"syscall"
"unsafe"
)
var (
modKernel32 = syscall.NewLazyDLL("kernel32.dll")
procGetSystemTimes = modKernel32.NewProc("GetSystemTimes")
)
type SystemTimes struct {
IdleTime *syscall.Filetime
KernelTime *syscall.Filetime
UserTime *syscall.Filetime
}
func main() {
times, err := getSystemTimes()
if err != nil {
log.Fatal(err)
}
log.Printf("idle=%v, kernel=%v, user=%v", times.IdleTime, times.KernelTime, times.UserTime)
}
func getSystemTimes() (times SystemTimes, err error) {
res, _, err1 := procGetSystemTimes.Call(uintptr(unsafe.Pointer(times.IdleTime)), uintptr(unsafe.Pointer(times.KernelTime)), uintptr(unsafe.Pointer(times.UserTime)))
if res != 1 {
return times, err1
}
return
}
它非常简单,非常类似于 stdlib 中的 syscall 的 GetProcessTimes 函数。看看,我的程序打印了什么:
idle=<nil>, kernel=<nil>, user=<nil>
为什么?我期望错误或结果,为什么我的字段为空?
配置:win8 x64,go1.4.2 windows/amd64
相关分类