python引用DLL文件的方法


Posted in Python onMay 11, 2015

本文实例讲述了python引用DLL文件的方法。分享给大家供大家参考。具体分析如下:

在python中调用dll文件中的接口比较简单,如我们有一个test.dll文件,内部定义如下:

extern "C" 
{ 
int __stdcall test( void* p, int len) 
{  
return len; 
} 
}

在python中我们可以用以下两种方式载入

1.

import ctypes
dll = ctypes.windll.LoadLibrary( 'test.dll' )

2.

import ctypes
dll = ctypes.WinDll( 'test.dll' )

其中ctypes.windll为ctypes.WinDll类的一个对象,已经在ctypes模块中定义好的。在test.dll中有test接口,可直接用dll调用即可

nRst = dll.test( )
print nRst

由于在test这个接口中需要传递两个参数,一个是void类型的指针,它指向一个缓冲区。一个是该缓冲区的长度。因此我们要获取到python中的字符串的指针和长度

#方法一:
sBuf = 'aaaaaaaaaabbbbbbbbbbbbbb'
pStr = ctypes.c_char_p( )
pStr.value = sBuf
pVoid = ctypes.cast( pStr, ctypes.c_void_p ).value
nRst = dll.test( pVoid, len( pStr.value) )
#方法二:
test = dll.test
test.argtypes = [ctypes.c_char_p, ctypes.c_int]
test.restypes = ctypes.c_int
nRst = test(sBuf, len(sBuf))

如果修改test.dll中接口的定义如下:

extern "C" 
{ 
  int __cdecl test( void* p, int len)
  { 
    return len; 
  } 
}

由于接口中定义的是cdecl格式的调用,所以在python中也需要用相应的类型

1.  

import ctypes
dll = ctypes.cdll.LoadLibrary( 'test.dll' )
##注:一般在linux下为test.o文件,同样可以使用如下的方法: 
##dll =ctypes.cdll.LoadLibrary('test.o')

2. 

import ctypes
dll = ctypes.CDll( 'test.dll' )

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
python 字符串只保留汉字的方法
Nov 16 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
深入解析Python中的WSGI接口
May 11 #Python
详细解析Python中__init__()方法的高级应用
May 11 #Python
从Python的源码来解析Python下的freeblock
May 11 #Python
详解Python的Django框架中的templates设置
May 11 #Python
Python素数检测的方法
May 11 #Python
Python中IPYTHON入门实例
May 11 #Python
Python使用MONGODB入门实例
May 11 #Python
You might like
php自动适应范围的分页代码
2008/08/05 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
改进Django中的表单的简单方法
2015/07/17 Python
Python分治法定义与应用实例详解
2017/07/28 Python
Python编程求质数实例代码
2018/01/31 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
python多进程使用函数封装实例
2020/05/02 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
python软件都是免费的吗
2020/06/18 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
创业者是否需要商业计划书?
2014/02/07 职场文书
简单租房协议书
2014/10/21 职场文书
请病假条范文
2015/08/17 职场文书
小学副班长竞选稿
2015/11/21 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫