博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】python引用DLL文件
阅读量:5808 次
发布时间:2019-06-18

本文共 1113 字,大约阅读时间需要 3 分钟。

hot3.png

python中调用dll文件中的接口比较简单,实例代码如下:

如我们有一个test.dll文件,内部定义如下:

extern "C"{int __stdcall test( void* p, int len){ return len;}}

python
中我们可以用以下两种方式载入

1.import ctypesdll = ctypes.windll.LoadLibrary( 'test.dll' )2.import ctypesdll = ctypes.WinDll( 'test.dll' )

其中ctypes.windllctypes.WinDll类的一个对象,已经在ctypes模块中定义好的。在test.dll中有test接口,可直接用dll调用即可

nRst = dll.test( )print nRst

由于在test这个接口中需要传递两个参数,一个是void类型的指针,它指向一个缓冲区。一个是该缓冲区的长度。因此我们要获取到python中的字符串的指针和长度

#方法一:sBuf = 'aaaaaaaaaabbbbbbbbbbbbbb'pStr = ctypes.c_char_p( )pStr.value = sBufpVoid = ctypes.cast( pStr, ctypes.c_void_p ).valuenRst = dll.test( pVoid, len( pStr.value) )#方法二:test  = dll.testtest.argtypes = [ctypes.c_char_p, ctypes.c_int]test.restypes = ctypes.c_intnRst = test(sBuf, len(sBuf))

如果修改test.dll中接口的定义如下:

extern "C"{    int __cdecl test( void* p, int len)    {        return len;    }}

由于接口中定义的是cdecl格式的调用,所以在python中也需要用相应的类型

1.import ctypesdll = ctypes.cdll.LoadLibrary( 'test.dll' )##注:一般在linux下为test.o文件,同样可以使用如下的方法:##dll =ctypes.cdll.LoadLibrary('test.o')2.import ctypesdll = ctypes.CDll( 'test.dll' )

转载于:https://my.oschina.net/xxjbs001/blog/396615

你可能感兴趣的文章
Webpack入门教程三十
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Kali linux virtualbox rc=1908 错误解决办法
查看>>
Erlang学习总结之Erlang语法中的逗号(,)、分号(;),句号(.)的正确用法...
查看>>
linux软件包管理之三(源代码安装)
查看>>
数据库三范式是什么?
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>
九叔Xen App测试报告
查看>>
Apache配置
查看>>
Ext gridPanel 单元格数据的渲染
查看>>
Android SDK 的下载代理
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
LNMP一键安装
查看>>
SQL Server数据库概述
查看>>
Linux 目录结构及内容详解
查看>>
startx命令--Linux命令应用大词典729个命令解读
查看>>
华为3026c交换机配置tftp备份命令
查看>>