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编程实战之Oracle数据库操作示例
Jun 21 Python
python监控键盘输入实例代码
Feb 09 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
Python如何实现强制数据类型转换
Nov 22 Python
对python中各个response的使用说明
Mar 28 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 Python
Python requests接口测试实现代码
Sep 08 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
python for循环赋值问题
Jun 03 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 session 预定义数组
2009/03/16 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
php 删除cookie方法详解
2014/12/01 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
列举Python中吸引人的一些特性
2015/04/09 Python
Python内置函数OCT详解
2016/11/09 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python rstrip()方法实例详解
2018/11/11 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
2014年学校领导班子对照检查材料
2014/09/19 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
初一数学教学反思
2016/02/17 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
mysql查看表结构的三种方法总结
2022/07/07 MySQL