ctypes 模块

Posted Shadow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctypes 模块相关的知识,希望对你有一定的参考价值。

  ctypes赋予了python类似于C语言一样的底层操作能力,通过ctypes模块可以调用动态链接库中的导出函数、构建复杂的c数据类型。

  ctypes提供了三种不同的动态链接库加载方式:cdll(),windll(),oledll()。

 

  HelloWorld.py:

1 import ctypes   #导入ctypes模块    
2 
3 NULL = 0
4 m_string = "Hello World!!!"
5 m_title = "Ctype Dlg"
6 
7 user32 = ctypes.cdll.user32    #加载user32.dll
8 user32.MessageBoxW(NULL,m_string,m_title,NULL)    #调用user32中的MessageBoxW函数

 

 

 

构建C语言数据类型:

 ctypes基本数据类型映射表

参数类型预先设定好,或者在调用函数时再把参数转成相应的c_***类型。ctypes的类型对应如下:

ctypes type C type Python Type
c_char char 1-character string
c_wchar wchar_t 1-character unicode string
c_byte char int/long
c_ubyte unsigned char int/long
c_bool bool bool
c_short short int/long
c_ushort unsigned short int/long
c_int int int/long
c_uint unsigned int int/long
c_long long int/long
c_ulong unsigned long int/long
c_longlong __int64 or longlong int/long
c_ulonglong unsigned __int64 or unsigned long long int/long
c_float float float
c_double double float
c_longdouble long double float float
c_char_p char * string or None
c_wchar_p wchar_t * unicode or None
c_void_p void * int/long or None
     

对应的指针类型是在后面加上"_p",如int*是c_int_p等等。在python中要实现c语言中的结构,需要用到类。 

 

构建C结构体:

  

 1 //c语言结构体
 2 
 3 struct test
 4 {
 5     int num1;
 6     int num2;       
 7 };
 8 
 9 //python ctypes 结构体
10 from ctypes import *
11 class test(Structure):
12 _fields_ = [
13 ("num1",c_int),
14 ("num2",c_int),
15 ]

 

以上是关于ctypes 模块的主要内容,如果未能解决你的问题,请参考以下文章

platform模块和ctypes模块

聊聊Python ctypes 模块(转载)

Python ctypes:从相对路径加载 DLL

ctypes获取扩展模块中函数的返回值

python C语言扩展之简单扩展-使用ctypes访问C代码

使用 ctypes 创建一个 python 模块