<!DOCTYPE html>
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