我有一个可通过 SIUSBXP (Silicon Labs) 访问的硬件。
有没有办法直接从 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。
关于go - 从 Go 使用 SIUSBXP 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59055256/