本篇文章给大家分享的是有关怎么在Python项目中调用.NET库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
C#读GPIO端口的代码是这样的:
IOPinStatus[] inputPinsStatus = null; IOPinStatus[] outputPinsStatus = null; Reader.GetIOStatus(out inputPinsStatus,out outputPinsStatus);
inputPinsStatus[i].pinStatus就是输入端口的状态,这是一个布尔型的变量。
IronPython需要先构造两个变量inputPinsStatus和outputPinsStatus,然后再调用GetIOStatus方法:
inputPinsStatus = clr.Reference[Array[bool]](()) outputPinsStatus = clr.Reference[Array[bool]](()) Reader.GetIOStatus(inputPinsStatus, outputPinsStatus)
inputPinsStatus是不能遍历的,必须使用inputPinsStatus.Value才可以。
C#写GPIO端口的代码是这样的(端口0写True):
IOPinStatus[] selectedOutPins = null; selectedOutPins = new IOPinStatus[6]; selectedOutPins[0].pin = IOPins.PIN_0; selectedOutPins[0].pinStatus = True; Reader.SetOutputStatus(selectedOutPins);
IronPython代码是这样的:
outForSet = Array.CreateInstance(IOPinStatus, 6) IOPinStatus.pin.SetValue(outForSet[0], IOPins.PIN_0) IOPinStatus.pinStatus.SetValue(outForSet[0], True) Reader.SetOutputStatus(outForSet)
这时,蹊跷事儿出现了:代码可以顺利执行,没有提示语法错误,设备也没有相应的动作!检查SetValue的结果,的确没有生效。本来这一句最初是这样写的:
outForSet[0].pinStatus = True
但系统提示:RuntimeWarning: Setting field Field on value type IOPinStatus may result in updating a copy. Use IOPinStatus.pinStatus.SetValue(instance, value) if this is safe. For more information help(IOPinStatus.pinStatus.SetValue).
改用SetValue之后,却好比对牛弹琴,什么反应也没有了。强烈郁闷中。。。
冥思苦想了一天之后,我发现了IOPinStatus的原型函数:
print IOPinStatus.__doc__ IOPinStatus(pin: IOPins, pinStatus: bool)
既然无法直接给变量的pin和pinStatus赋值,那么重新构造一个变量是否可行呢?
outForSet = Array.CreateInstance(IOPinStatus, 6) outForSet[0] = IOPinStatus(IOPins.PIN_0, True) ... ... Reader.SetOutputStatus(outForSet)
以上就是怎么在Python项目中调用.NET库,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。