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

标签 go

我有一个可通过 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/

相关文章:

go - 我如何在 golang 中反射性地创建一个枚举实例?

Go - 实例化结构并获取指向它的指针的 "&MyStruct{1, 2}"语法何时有用?

json - 处理自定义 BSON 编码

api - 语法错误 : need trailing comma before newline in composite literal

json - 缓冲区字符串()不等于字符串

go - 如何检查 Cloud Pub/Sub 模拟器是否已启动并正在运行?

http - 发送请求时:错误请求

xml - 具有 XML 命名空间的属性

go - 为什么 go package unsafe 源代码只有六行?

post - Http POST 导致 : Too many arguments to return