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 相关文章推荐
TensorFlow损失函数专题详解
Apr 26 Python
python 常见字符串与函数的用法详解
Nov 23 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
linux查找当前python解释器的位置方法
Feb 20 Python
Python中Numpy mat的使用详解
May 24 Python
python替换字符串中的子串图文步骤
Jun 19 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python实现超市商品销售管理系统
Nov 22 Python
pytorch之inception_v3的实现案例
Jan 06 Python
学习Python爬虫的几点建议
Aug 05 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
pycharm 2020 1.1的安装流程
Sep 29 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实现邮件群发的源码
2013/06/18 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
JavaScript中的类继承
2010/11/25 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python连接phoenix的方法示例
2017/09/29 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python如何提升爬虫效率
2020/09/27 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
.net笔试题
2014/03/03 面试题
写给女生的道歉信
2014/01/14 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
年终奖发放方案
2014/06/02 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS