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中的闭包详细介绍和实例
Nov 21 Python
python 写的一个爬虫程序源码
Feb 28 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
微信跳一跳python代码实现
Jan 05 Python
使用python编写监听端
Apr 12 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
django 类视图的使用方法详解
Jul 24 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
Django操作cookie的实现
May 26 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
在Python中增加和插入元素的示例
2018/11/01 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
巴基斯坦购物网站:Goto
2019/03/11 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
开朗女孩的自我评价
2014/02/10 职场文书
领导班子整改措施
2014/10/24 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python