Python调用.NET库的方法步骤


Posted in Python onDecember 27, 2019

开发背景是这样的:整个项目中使用很多台摩托罗拉的RFID读卡器,我要为这些读卡器写一个管理程序,判断是否有RFID标签进入或离开某个区域。用户提供给我的,除了设备,就是一个.net的动态库文件。

经朋友指点,安装了.NET Framework 4.0和IronPython 2.7之后,终于可以调用.net库了。我不确定的是,python环境下那些打包工具是否还是使用,因为脚本要在IronPython的解释器ipy.exe中运行——这是后话,需要在以后的应用中去实践。先说说实际应用中的稀奇古怪的问题吧。

我的核心任务有两个:读RFID标签、读写GPIO端口。前者相对简单,操作过程也非常顺利。后者就屡屡碰壁,到现在也没有彻底解决。

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 相关文章推荐
常用python数据类型转换函数总结
Mar 11 Python
python执行get提交的方法
Apr 29 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
python中的itertools的使用详解
Jan 13 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
Python开发入门——迭代的基本使用
Sep 03 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
IronPython连接MySQL的方法步骤
Dec 27 #Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 #Python
python3获取文件中url内容并下载代码实例
Dec 27 #Python
用python拟合等角螺线的实现示例
Dec 27 #Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 #Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 #Python
python装饰器相当于函数的调用方式
Dec 27 #Python
You might like
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
杏林同学录(三)
2006/10/09 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
实习求职信
2013/12/01 职场文书
服务理念口号
2014/06/11 职场文书
56句经典英文座右铭
2019/08/09 职场文书
Python 如何安装Selenium
2021/05/06 Python
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android