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设计模式之单例模式实例
Apr 26 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
python和shell监控linux服务器的详细代码
Jun 22 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
python模拟实现斗地主发牌
Jan 07 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
什么是python的id函数
Jun 11 Python
python中的对数log函数表示及用法
Dec 09 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 Python
python脚本框架webpy模板赋值实现
Nov 20 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Python常用特殊方法实例总结
2019/03/22 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Python JSON编解码方式原理详解
2020/01/20 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
C#如何进行LDAP用户校验
2012/11/21 面试题
历史教育专业个人求职信
2013/12/13 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
学生逃课检讨书
2015/02/17 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书