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转换摩斯密码示例
Feb 16 Python
解决python写的windows服务不能启动的问题
Apr 15 Python
使用Python实现下载网易云音乐的高清MV
Mar 16 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
Python变量作用域LEGB用法解析
Feb 04 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
python基础学习之递归函数知识总结
May 26 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
PHP swfupload图片上传的实例代码
2013/09/30 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
python中requests模块的使用方法
2015/04/08 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
pip命令无法使用的解决方法
2018/06/12 Python
python for循环remove同一个list过程解析
2019/08/14 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
母亲节感恩活动记录
2014/03/16 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书