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 ]
时间: 2024-10-23 09:44:51

ctypes 模块的相关文章

platform模块和ctypes模块

一.ctypes模块 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库的形式,即 Windows 下的 .dll 文件,或者 Linux 下的 .so 文件.先来看一下 ctypes 怎么使用 C 标准库. Windows 系统下的 C 标准库动态链接文件为 msvcrt.dll (一般在目录 C:\Windows\System32 和 C:\Windows\SysWOW64 下分别对应 32-bit 和 64-bit,使用时不用刻意区分,Python 会选择合适

Python ctypes 模块

一: 模块介绍 模块ctypes是Python内建的用于调用动态链接库函数的功能模块,一定程度上可以用于Python与其他语言的混合编程.由于编写动态链接库,使用C/C++是最常见的方式,故ctypes最常用于Python与C/C++混合编程之中. 二:ctypes 的原理以及优缺点 从ctypes的文档中可以推断,在各个平台上均使用了对应平台动态加载动态链接库的方法,并通过一套类型映射的方式将Python与二进制动态链接库相连接.通过阅读ctypes本身的代码也可以印证这个推断(/Module

聊聊Python ctypes 模块(转载)

https://zhuanlan.zhihu.com/p/20152309?columnSlug=python-dev 作者:Jerry Jho链接:https://zhuanlan.zhihu.com/p/20152309来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 摘要:模块ctypes是Python内建的用于调用动态链接库函数的功能模块,一定程度上可以用于Python与其他语言的混合编程.由于编写动态链接库,使用C/C++是最常见的方式,故ctypes最常

[转]python使用ctypes模块调用windowsapi获取系统版本

#coding: utf-8 import win32ui import win32gui import win32con import win32api #https://mail.python.org/pipermail/python-win32/2009-April/009078.html ''' ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON) ico_y = win32api.GetSystemMetrics(win32con.

Python学习之使用ctypes模块操作C扩展程序

ctypes

Pyhon 嵌入C/C++模块(一)

1 Extending Python with C or C++ It is quite easy to add new built-in modules to Python, if you know how to program in C. Such extension modules can do two things that can’t be done directly in Python: they can implement new built-in object types, an

Python:线程、进程与协程(5)——multiprocessing模块(2)

上篇博文介绍了Python的multiprocessing模块创建进程Process 类,进程间通信,进程间的同步三个部分,下面接着介绍学习进程共享. (1)内存共享 在多进程情况下,由于每个进程有自己独立的内存空间,怎样能实现内存共享呢?multiprocessing模块提供了Value, Array,这两个是函数,详细定义在sharedctypes.py里,有兴趣的可以去看看(等了解了ctypes模块后回头再分享下我的理解,今天就先放放)   Value Value的初始化非常简单,直接类似

python模块介绍- multi-mechanize 通用的性能测试工具

简介 Multi-Mechanize 是一个开源的性能和负载测试框架,它并发运行多个 Python 脚本对网站或者服务生成负载(组合事务).测试输出报告保存为HTML或JMeter的兼容的XML.Multi-Mechanize最常用于web性能和可扩展性(scalability)测试,也适用于任何python可以访问的API.尤其适合后台性能测试.稍微懂点编程的话,这个工具会远强过商业的性能测试工具. 主要特性: 支持各种 HTTP methods 高级超链接和HTML表单支持 支持 SSL 自

Python标准库笔记(6) — struct模块

该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换.这可以用于处理存储在文件中或从网络连接中存储的二进制数据,以及其他数据源. 用途: 在Python基本数据类型和二进制数据之间进行转换 struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串. 模块函数和Struct类 它除了提供一个Struct类之外,还有许多模块级的函数用于处理结构化的值.这里有个格式符(Format specifiers)的概念,是指从字符串格式转换为已编