使用python的内置ctypes模块与c、c++写的dll进行交互
2011-12-13 15:39
746 查看
调用C编写的动态链接库
代码示例
from ctypes import * dll = CDLL("add.dll")#加载cdecl的dll。另外加载stdcall的dll的方式是WinDLL("dllpath") sum=dll.Add(1, 102)
若参数为指针
p=1 sum=dll.sub(2, byref(p))#通过库中的byref关键字来实现
若参数为结构体
C代码如下:
typedef struct { char words[10]; }keywords; typedef struct { keywords *kws; unsigned int len; }outStruct; extern "C"int __declspec(dllexport) test(outStruct *o); int test(outStruct *o) { unsigned int i = 4; o->kws = (keywords *)malloc(sizeof(unsigned char) * 10 * i); strcpy(o->kws[0].words, "The First Data"); strcpy(o->kws[1].words, "The Second Data"); o->len = i; return 1; }
Python代码如下:
class keywords(Structure): _fields_ = [('words', c_char *10),] class outStruct(Structure): _fields_ = [('kws', POINTER(keywords)),('len', c_int),] o = outStruct() dll.test(byref(o)) print (o.kws[0].words) print (o.kws[1].words) print (o.len)
调用Windows API
#导入ctypes模块 from ctypes import * windll.user32.MessageBoxW(0, '内容!', '标题', 0) #也可以用以下方式为API函数建立个别名后再进行调用 MessageBox = windll.user32.MessageBoxW MessageBox(0, '内容!', '标题', 0)
运行结果预览
相关文章推荐
- 使用python的内置ctypes模块与c、c++写的dll进行交互
- 使用Python内置的模块与函数进行不同进制的数的转换
- 使用Python内置的模块与函数进行不同进制的数的转换
- python:使用socket模块,进行服务器与客户端简单交互
- Python内置的操作系统模块(os)与解释器交互模块(sys)
- Python使用内置json模块解析json格式数据的方法
- Python使用paramiko进行远程交互
- Python:使用ctypes库调用外部DLL
- Python使用base64模块进行二进制数据编码详解
- 使用Python中HTTPParser模块进行简单的html解析
- 在python中使用cx_Oracle模块出现“DLL Load failed”的处理方法
- python使用ctypes模块调用windowsapi获取系统版本示例
- 在Python中使用PIL模块对图片进行高斯模糊处理的教程
- python 常用的内置模块使用
- 飘逸的python - 使用dis模块进行代码层次的性能剖析
- Python安装使用命令行交互模块pexpect的基础教程
- python 使用poster模块进行http方式的文件传输到服务器
- python3 使用threading模块进行多线程编码实现
- 学习笔记(11月10日)--python常用内置模块的使用(logging, os, command)
- 使用python 与邮件服务器交互——imaplib 模块标准库解析