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在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python实现移位加密和解密
Mar 22 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
python同时替换多个字符串方法示例
Sep 17 Python
python SocketServer源码深入解读
Sep 17 Python
python模拟实现斗地主发牌
Jan 07 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
为什么相对PHP黑python的更少
Jun 21 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 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
实现获取http内容的php函数分享
2014/02/16 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
Django 前后台的数据传递的方法
2017/08/08 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
化工专业大学生职业生涯规划书
2014/01/14 职场文书
岗位明星事迹材料
2014/05/18 职场文书
环境日宣传活动总结
2014/07/09 职场文书
2014年营销工作总结
2014/11/22 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书