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判断操作系统类型代码分享
Nov 22 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
详解Python基础random模块随机数的生成
Mar 23 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
Python3实现二叉树的最大深度
Sep 30 Python
Python bytes string相互转换过程解析
Mar 05 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
在终端启动Python时报错的解决方案
Nov 20 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 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和MySQL保存和输出图片
2006/10/09 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php 文本文件的读取效率
2012/02/10 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
javascript判断office版本示例
2014/04/11 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
Python列表删除的三种方法代码分享
2017/10/31 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
2014自荐信的写作技巧
2014/01/28 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
Python基础之元编程知识总结
2021/05/23 Python