从Go使用SIUSBXP的正确方法是什么?

从Go使用SIUSBXP的正确方法是什么?,go,Go,我有一个通过SIUSBXP(硅实验室)访问的硬件 是否有直接从Go访问硬件的方法 或者我应该编写一个C/C++包装并将其链接到我的Go程序吗?关于这个dll,我让这个动物工作: SiUSBXp = syscall.MustLoadDLL("SiUSBXp.dll") SIGetNumDevices = SiUSBXp.MustFindProc("SI_GetNumDevices") SIGetProductString

我有一个通过SIUSBXP(硅实验室)访问的硬件

是否有直接从Go访问硬件的方法


或者我应该编写一个C/C++包装并将其链接到我的Go程序吗?

关于这个dll,我让这个动物工作:

SiUSBXp                      = syscall.MustLoadDLL("SiUSBXp.dll")
SIGetNumDevices              = SiUSBXp.MustFindProc("SI_GetNumDevices")
SIGetProductString           = SiUSBXp.MustFindProc("SI_GetProductString")
.
.
.
... and so on...
这样,dll由第一行加载,所需的函数在其他行中引用

要调用函数,例如:

func GetNumDevices() int {
var lpdwNumDevices int
r1, _, _ := SIGetNumDevices.Call(uintptr(unsafe.Pointer(&lpdwNumDevices)))

if int(r1) == StatusSISUCCESS {
    if lpdwNumDevices == 1 {
        log.Println(lpdwNumDevices,"hardware(s) found")
    }
    return lpdwNumDevices
}

return -1
}
据我所知,当您需要与其他dll通信时,可以使用这种代码


请注意,我没有使用cgo。

我有点不明白这里的问题,是操作系统决定了你是否可以直接访问硬件,而不是语言,对吗?如果考虑到驾驶员,cgo可能会有所帮助