登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-24 08:33:35 153浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《从 Go 使用 SIUSBXP 的正确方法是什么?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我有一个可通过 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 使用 SIUSBXP 的正确方法是什么?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>