pythonnet 详解,Python调用.net动态库实现过程解析
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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。
pythonnet 详解,Python调用.net动态库实现过程解析相关推荐
- python调用c#dll_详解Python 调用C# dll库最简方法
1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应 ...
- python调用.net动态库
# python调用.net动态库 ### pythonnet简介 ----------------------------- - pythonnet是cpython的扩展 - pythonnet提供 ...
- python调用c++动态库 linux_linux中使用boost.python调用c++动态库的方法
前言 最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面.测试办法是让 robot ...
- python调用cmd命令释放端口_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- python调用c++动态库
python调用C++动态库 生成C++动态库 1.编译成64位的dll库 2. C++ 模板 3. 示例 Python调用带参数的动态库 python与c数据类型 int.long.float.do ...
- python调用ping命令并输出ttl_详解Python调用系统命令的六种方法
作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system().os.popen().subprocess.popen().subprocess.c ...
- python调用c++动态库_Python应用:调用C/C++动态链接库的方法详解
Linux系统下调用动态库(.so) 1.linuxany.c代码如下: #include "stdio.h" void display(char* msg){ printf(&q ...
- python调用c++动态库_Python调用C/C++动态链接库的方法
本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: //hello.h #ifdef E ...
- python调用qt动态库_QT开发——动态库(.so文件)的生成与调用
1.qmake方式生成和调用动态库 链接:https://blog.csdn.net/lywzgzl/article/details/42805991 2.cmake方式生成和调用动态库 2.1创建共 ...
最新文章
- python压缩与解压缩
- 2015年度互联网安全报告发布 移动支付成重灾区
- 平衡二叉树的构造_LeetCode 题解 | 110.平衡二叉树
- 计算机前端专业术语,学习计算机知识必须懂得50个专业术语
- 配置ELK添加marvel插件
- Objective-C 编码规范
- linux编译避免污染源码分离,如何避免linux上的系统标准C/C++库?
- mfc如何删除lineto画的_有哪些好用的板绘软件?衣服上的花纹怎么画?
- 前后端分离使用 Token 登录解决方案
- Android Studio 导入 AOSP 源码 1
- OpenGL+VS2013环境配置
- 复制一个空洞文件且忽略掉其空洞内容
- mysql数据库学习6_MySQL学习(六)
- SpringBoot整合shiro的一个例子
- 7塞班贝拉系统下载_远观JAVA,近观鸿蒙,盘点那些年我们用过的手机系统
- Unity3D入门篇
- 液压机行业研究及十四五规划分析报告
- 超像素分割SLIC与SLIC0(SLIC Zero)算法的区别
- php公益培训第2部,PHP高手之路-传世经典第二部直播课表
- Windows系统下的百度云不限速