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通过select实现异步IO的方法
Jun 04 Python
Python实现Linux中的du命令
Jun 12 Python
Pycharm更换python解释器的方法
Oct 29 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
python requests指定出口ip的例子
Jul 25 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
Python logging日志模块 配置文件方式
Jul 12 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
python lambda的使用详解
Feb 26 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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类相关知识点实例总结
2016/09/28 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
Python中的进程分支fork和exec详解
2015/04/11 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python对列表的操作知识点详解
2019/08/20 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
Python的形参和实参使用方式
2019/12/24 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
教育技术学专业职业规划书
2014/03/03 职场文书
秘书英文求职信
2014/04/16 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
教师个人年终总结
2015/02/11 职场文书
自荐信格式范文
2015/03/04 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
七个Python必备的GUI库
2021/04/27 Python
浅谈Vue的computed计算属性
2022/03/21 Vue.js
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技