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的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
对Python 语音识别框架详解
Dec 24 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
python3正则提取字符串里的中文实例
Jan 31 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
Python类super()及私有属性原理解析
Jun 15 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 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
重置版游戏视频
2020/04/09 魔兽争霸
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python爬虫实现获取下一页代码
2020/03/13 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
高二生物教学反思
2014/01/27 职场文书
残疾人小组计划书
2014/04/27 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
Python机器学习之逻辑回归
2021/05/11 Python