ctypes模块

<!DOCTYPE html>

ctypes模块

ctypes模块

让你能够用动态链接的形式使用函数,有着强大的创造c数据类型的能力。

?构建C数据类型,python给出的一种形式,让你可以用C和C++的方式来写程序,当然和C/C++还是有区别,这里有张图。


动态链接库DLL(windows) = shared objects (linux) = "程序运行时调用的已编译的二进制文件"

有三种,cdll(),是输出功能使用cdecl声明

            windll (),使用stdcall声明管理,是微软win32传统的api惯例

            oledll(),有点像stdcall,但是返回hresult错误代码

?什么是声明惯例

定义了如何称呼一个特别的功能,它包括了1参数如何分配,2哪个变量入栈或通过注册表,3当函数返回时,栈如何保持完好无损。

需要理解两个声明

cdecl ,被x86上的C编译器广泛使用。

stdcall,被win32API所使用。

?为何参数要从右向左入栈。

int xdd(one,two,three)    这是c语言建立xdd函数,包含三个参数

push three   由编译器转换为汇编代码时,是这样入栈的。其他方式入栈可不可以呢?可以。最重要的是一致。

push two

push one

call xdd

>>> from ctypes import *

>>> print windll.kernel32