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 数据加密代码
Dec 24 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
查看python下OpenCV版本的方法
Aug 03 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
python开发游戏的前期准备
May 05 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
Python调用Windows命令打印文件
Feb 07 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
python argparse传入布尔参数false不生效的解决
Apr 20 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 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python内置的字符串处理函数整理
2013/01/29 Python
python实现的文件夹清理程序分享
2014/11/22 Python
python访问类中docstring注释的实现方法
2015/05/04 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
解决python flask中config配置管理的问题
2019/07/26 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
python中time tzset()函数实例用法
2021/02/18 Python
最新党员的自我评价分享
2013/11/04 职场文书
十八大报告观后感
2014/01/28 职场文书
优秀教师工作感言
2014/02/16 职场文书
土木工程专业推荐信
2014/02/19 职场文书
优质服务演讲稿
2014/05/14 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python