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 相关文章推荐
scrapy爬虫完整实例
Jan 25 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 Python
Python 从相对路径下import的方法
Dec 04 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
提升python处理速度原理及方法实例
Dec 25 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
七个非常实用的Python工具包总结
Jun 15 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新浪微博登录接口用法实例
2014/12/23 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python读写docx文件的方法
2018/05/08 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
python一键去抖音视频水印工具
2018/09/14 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
python3注册全局热键的实现
2020/03/22 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
端午节活动策划方案
2014/03/09 职场文书
保护环境倡议书100字
2014/05/19 职场文书
法学求职信
2014/06/22 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
标准发言稿结尾
2019/07/18 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python