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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python写的英文字符大小写转换代码示例
Mar 06 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Django rest framework实现分页的示例
May 24 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
python 实现多维数组转向量
Nov 30 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
Pygame框架实现飞机大战
Aug 07 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 Python
python 模拟登录B站的示例代码
Dec 15 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
python二叉树的实现实例
2013/11/21 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
python异步存储数据详解
2019/03/19 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
节能减耗标语
2014/06/21 职场文书
医药销售自我评价200字
2014/09/11 职场文书
小学国庆节活动总结
2015/03/23 职场文书
留学推荐信中文范文
2015/03/26 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang