Python调用.net动态库实现过程解析


Posted in Python onJune 05, 2020

pythonnet简介

  • pythonnet是cpython的扩展
  • pythonnet提供了cpython和.net程序集之间交互的桥梁
  • pythonnet开源在github上

pythonnet安装

通过pip install pythonnet安装

pythonnet的使用帮助

pythonnet的使用帮助,请参见github.

pythonnet中的坑

cpython是分32和64位的,对应的pythonnet也是分的,版本要对应好
pythonnet最核心的就是python.Runtime.dll动态库,这个库是c#编写的实现了两种语言的交互

ref类型的参数如何返回

  • 返回值的第一个元素是c#的返回值
  • 返回值的第二个元素就是ref的值了,ref String[] 对应的返回值第二个元素就是元组tuple

如何加载动态库

# clr是公共运行时环境,该模块是与c#交互的核心
import clr
import sys
# 导入clr时这个模块最好也一起导入,这样可用使用AddReference()方法
import System

# input()

from System import Array
from System import String

# 打印当前.net运行时的版本
print(System.Environment.Version)

# 打印当前的环境变量
print('---------------------')
for p in sys.path:
  print(p)
print('---------------------')

# 加载动态,不要带动态库的后缀名,如果d=None,表示动态库没有找到
d = clr.FindAssembly('YctxKj.Card.Interpreter')
print(d)
# from后面跟的是动态库的名字,不是命名空间
from YctxKj.Card.Interpreter import *
d = clr.FindAssembly('YctxKj.Card.CardReader')
print(d)
from YctxKj.Card import CardReader

# 打印程序集,如果动态库加载成功,程序集里就会含有动态库的程序集
lt = clr.ListAssemblies(False)

for i in range(lt.Length):
  print('%d = %s' % (i,lt[i]))

ret = 0

# 程序调用业务代码
_reader = CardReader()
_Interpreter = ScriptInterpreter()
_Interpreter._reader = _reader
_Interpreter.Init();

ret = _Interpreter.SetKeyMode(305)
print('ret=%d' % ret)

arCarder = ''

# input() 可以程序暂停,然后使用vs附加进程python.exe调试
# input()
ret = _reader.ListReader(arCarder);
print('ret = %d' % ret[0])
print('ref param string[] length = %d' % ret[1].Length)
if ret[1].Length > 0:
  items = ret[1]

  for t in items:
    print(t)
else:
  print('don\'t find cardreader dev')
  exit()

# 链接读卡器
strReader = items[1]
strATR = ''
nRet = _reader.Connect(strReader, strATR)
if nRet[0] != 0:
  print('connect card fail, nRet=%d' % nRet[0])
  _reader.Beep()
  _reader.Beep()
  exit()

print('crd connect successed,atr=%s' % nRet[1])
_reader.Beep()
# 断开读卡器
_reader.Disconnect()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python算法之栈(stack)的实现
Aug 18 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
python使用xslt提取网页数据的方法
Feb 23 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
20行python代码的入门级小游戏的详解
May 05 Python
Python转换时间的图文方法
Jul 01 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
python中数据库like模糊查询方式
Mar 02 Python
基于Python测试程序是否有错误
May 16 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
Pandas数据分析的一些常用小技巧
Feb 07 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 #Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 #Python
python3检查字典传入函数键是否齐全的实例
Jun 05 #Python
Python使用20行代码实现微信聊天机器人
Jun 05 #Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 #Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 #Python
python3读取autocad图形文件.py实例
Jun 05 #Python
You might like
PHP可逆加密/解密函数分享
2012/09/25 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
php处理复杂xml数据示例
2016/07/11 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
幼儿园小班家长寄语
2014/04/02 职场文书
班级标语大全
2014/06/21 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
个人求职意向书
2015/05/11 职场文书
小学运动会前导词
2015/07/20 职场文书
2016入党心得体会范文
2016/01/06 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Python中的pprint模块
2021/11/27 Python
python分分钟绘制精美地图海报
2022/02/15 Python