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中DOM方法的动态性
Apr 11 Python
分享python数据统计的一些小技巧
Jul 21 Python
python实现批量视频分帧、保存视频帧
May 31 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
Django Celery异步任务队列的实现
Jul 24 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
Pycharm小白级简单使用教程
Jan 08 Python
基于python3实现倒叙字符串
Feb 18 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
matplotlib部件之套索Lasso的使用
Feb 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
ThinkPHP标签制作教程
2014/07/10 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
显示、隐藏密码
2006/07/01 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
对pandas进行数据预处理的实例讲解
2018/04/20 Python
Python函数装饰器实现方法详解
2018/12/22 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
幼儿园教师备课制度
2014/01/12 职场文书
网络技术专业求职信
2014/02/18 职场文书
挂牌仪式主持词
2014/03/20 职场文书
老公给老婆的保证书
2014/04/28 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
2014年妇女工作总结
2014/12/06 职场文书
市场部岗位职责
2015/02/12 职场文书
开票员岗位职责
2015/02/12 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电