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之模块的加载
Oct 24 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
python如何爬取个性签名
Jun 19 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
keras处理欠拟合和过拟合的实例讲解
May 25 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版
2006/10/09 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
轻松实现python搭建微信公众平台
2016/02/16 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
python使用thrift教程的方法示例
2019/03/21 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
python简单实现插入排序实例代码
2020/12/16 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
市场安全管理制度
2014/01/26 职场文书
2014和解协议书范文
2014/09/15 职场文书
师德师风自查材料
2014/10/14 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
公积金具结保证书
2015/05/11 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript