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实现巡检系统(solaris)示例
Apr 02 Python
详解Python爬虫的基本写法
Jan 08 Python
Python入门_学会创建并调用函数的方法
May 16 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
Python程序打包工具py2exe和PyInstaller详解
Jun 28 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
使用python实现多维数据降维操作
Feb 24 Python
Python实现寻找回文数字过程解析
Jun 09 Python
python suds访问webservice服务实现
Jun 26 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP insert语法详解
2008/06/07 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python双向链表实现实例代码
2013/11/21 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
英国现代绅士品牌:Hackett
2017/12/17 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
C#软件工程师英语面试题
2015/06/07 面试题
应届医学毕业生求职信分享
2013/12/02 职场文书
党员承诺践诺书
2014/05/20 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
2015年技术员工作总结
2015/04/10 职场文书
入党转正介绍人意见
2015/06/03 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang