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中关于日期时间处理的问答集锦
Mar 08 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
Python for循环与range函数的使用详解
Mar 23 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
python3实现简单飞机大战
Nov 29 Python
Python中re模块的元字符使用小结
Apr 07 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
php使用codebase生成随机数
2014/03/25 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
layui导航栏实现代码
2017/05/19 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python计算n的阶乘的方法代码
2019/10/25 Python
python实现XML解析的方法解析
2019/11/16 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
mysql有关权限的表都有哪几个
2015/04/22 面试题
师范生自我鉴定范文
2013/10/05 职场文书
《雾凇》教学反思
2014/02/17 职场文书
《满井游记》教学反思
2014/02/26 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
最新离婚协议书范本
2014/08/19 职场文书
羊脂球读书笔记
2015/06/30 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript