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 相关文章推荐
pandas实现选取特定索引的行
Apr 20 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
Python二叉树的镜像转换实现方法示例
Mar 06 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
Python发送邮件的实例代码讲解
Oct 16 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
pytorch使用 to 进行类型转换方式
Jan 08 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
利用Python多线程实现图片下载器
Mar 25 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
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python实现中文转换url编码的方法
2016/06/14 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
tensorflow 实现数据类型转换
2020/02/17 Python
详解Python中的Lock和Rlock
2021/01/26 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
幼儿教师培训感言
2014/03/08 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers