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 list中append()与extend()用法分享
Mar 24 Python
python操作gmail实例
Jan 14 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
对python中的pop函数和append函数详解
May 04 Python
python协程之动态添加任务的方法
Feb 19 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
python学习开发mock接口
Apr 28 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
Python爬虫入门有哪些基础知识点
Jun 02 Python
python 两种方法删除空文件夹
Sep 29 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
Nov 28 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语法(2)
2006/10/09 PHP
实现php加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
Symfony生成二维码的方法
2016/02/04 PHP
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
Python中异常重试的解决方案详解
2017/05/05 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
学习Django知识点分享
2019/09/11 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
饭店工作计划书
2014/01/10 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
入党介绍人评语
2014/05/06 职场文书
会计个人实习计划书
2014/08/15 职场文书
同学聚会通知书
2015/04/20 职场文书
小学英语课教学反思
2016/02/15 职场文书
创业计划书之干洗店
2019/09/10 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技