python引用DLL文件的方法
作者:像风一样的自由 发布时间:2021-01-17 03:35:19
标签:python,DLL
本文实例讲述了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程序设计有所帮助。
0
投稿
猜你喜欢
- 前文学习:python数据类型: python数据结构:数据类型.python的输入输出: python数据结构输入输出及控制和异常.pyt
- pytest-playwright 是一个 Python 包,它允许您使用 Microsoft 的 Playwright 库在 Python
- 在计算机普及的现代设计领域,文字的设计的工作很大一部分由计算机代替人脑完成了(很多平面设计软件中都有制作艺术汉字的引导,以及提供了数十上百种
- 本例以Linux上安装Pyhton3.8版本为例进行说明1、依赖包安装yum -y install zlib-devel bzip2-dev
- 本文实例讲述了python操作redis的方法。分享给大家供大家参考。具体如下:#!/usr/bin/python#coding=utf-8
- 你是否曾为表单设计感到过沮丧或不知所措呢?接下来三篇文章,希望能彻底改变你的看法,真正爱上Web表单设计。首先感谢Luke Wroblews
- 描述cmp() 方法用于比较两个列表的元素。语法cmp()方法语法:cmp(list1, list2)参数list1 -- 比较的列表。li
- python纵向合并任意多个图片,files是要拼接的文件list# -*- coding:utf-8 -*-def mergeReport
- 前言前文讲述了ppi-cpi和m0-m1-m2的图形绘制,在本文中继续分享一个反映经济活动景气度的指标PMI,在本文中还是采用爬虫的方式获取
- <?php echo CHtml::link('错误链接','user/register')?>
- python实现取余操作的方法:可以利用求模运算符(%)来实现。求模运算符可以将两个数相除得到其余数。我们还可以使用divmod()函数来实
- 一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储
- 摸到她了!青翠的衣衫,奶白的肌肤,捧在手上的感觉真是太好了,心里美滋滋的。《悟透JavaScript》,一本偶然之作,终于成书并出版了。本书
- 在用ThinkPHP做tags标签的时候,出现了一个问题,就是能获取到参数,但是查不出相应的结果。查看数据库发现数据是存在的。问题出在哪了呢
- 一、获取安装包:Pycharm 官网 下载页面 :点击打开Anconda 官网 下载页面 :点击打开选择对应的系统和需要的版本进行下载,py
- 如果需要对列表中的每个元素执行相同操作,这时就需要遍历列表的所有元素。books=['半生缘','往事并不如烟
- 在web开发中经常遇到多关键词对对单个字段查询,我一般是通过动态数组来实现的。当然多个关键词的一般是用空格或,隔开,我这几假设多个关键词用空
- 问题当浏览SQL Server 2008的新特性时,我们看到了透明数据加密。这看起来很有趣。您能为我们解释一下并介绍下执行它的细节吗?专家解
- 如下所示:matrix.py#!/usr/bin/python# -*- encoding:UTF-8-*-import pprintimp
- 无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会。回到大学我希望他们教我的是Python而不是Java