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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
python代码实现ID3决策树算法
Dec 20 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
PyTorch学习笔记之回归实战
May 28 Python
python tornado微信开发入门代码
Aug 24 Python
python读取xlsx的方法
Dec 25 Python
使用python socket分发大文件的实现方法
Jul 08 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
如何在python中判断变量的类型
Jul 29 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
Python中的socket网络模块介绍
Jul 23 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 sprintf()函数用例解析
2011/05/18 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
python中正则表达式与模式匹配
2019/05/07 Python
python根据时间获取周数代码实例
2019/09/30 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
Nike瑞士官网:Nike CH
2021/01/18 全球购物
教学实习自我评价
2014/01/28 职场文书
毕业自我评价
2014/02/05 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
民事答辩状范本
2015/05/21 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server