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的Tornado框架中内置的模板引擎
Jul 11 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
python自动化测试之如何解析excel文件
Jun 27 Python
python实现车牌识别的示例代码
Aug 05 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python wxpython 实现界面跳转功能
Dec 17 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
python常见的占位符总结及用法
Jul 02 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
简单采集了yahoo的一些数据
2007/02/14 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
python验证码识别实例代码
2018/02/03 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
python递归法解决棋盘分割问题
2019/07/17 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
请客吃饭开场白
2015/06/01 职场文书
六一亲子活动感想
2015/08/07 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书