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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python实现在线音乐播放器
Mar 03 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
python对象与json相互转换的方法
May 07 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
Python如何省略括号方法详解
Mar 21 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
Python如何将字符串转换为日期
Jul 31 Python
Python3接口性能测试实例代码
Jun 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将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
基于vue 实现token验证的实例代码
2017/12/14 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python中count函数简单用法
2020/01/05 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
化学教师自荐信范文
2013/12/28 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
新课培训心得体会
2014/09/03 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
一级电子管军用接收机测评
2022/04/05 无线电