go - 从 Go 使用 SIUSBXP 的正确方法是什么?
问题描述
我有一个通过 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。
推荐阅读
- python - 如何将带有 unicode 数据的行转换为 Py2 和 Py3 上的 latin-1 编码的 csv 数据?
- laravel - 在 Laravel 中使用多个控制器和模型的最佳方法是什么
- csv - 我正在尝试根据 csvfile 中的数据在屏幕上移动一个立方体,但它不起作用。有人可以帮我处理这段代码吗?
- javascript - 如何一键获取不同的值?
- vba - 如何使用 Connect_Net 的密码连接到 zk ua300?
- audio - WM8904 和 SAMV71 重复电路问题
- aws-lambda - 无服务器功能可以部署在 AWS 上,在本地调用,但在 AWS 上找不到
- jquery - 如何增加触摸屏复选框的可点击区域
- python - 如何使用自定义文本创建具有多种选择的模型?
- python - NumPy 数组元素在被选中时会发生奇怪的变化