zoukankan      html  css  js  c++  java
  • ctypes使用

    ctypes是python的兼容库, 提供c的数据类型兼容,可方便调用c动态库接口
    c动态库在linux下为so,windows下为dll

     ctypes模块中有三种不同的动态链接库加载方式:cdll, windll, oledll。不同之处在于链接库中的函数所遵从的函数调用方式(calling convention)以及返回方式有所不同。
        cdll用于加载遵循cdecl标准函数调用约定的链接库。windll则用于加载遵循stdcall调用约定的动态链接库。oledll与windll完全相同,只是会默认其载入的函数会统一返回一个Windows HRESULT错误编码。

    函数调用约定指的是函数参数入栈的顺序、哪些参数入栈、哪些通过寄存器传值、函数返回时栈帧的回收方式(是由调用者负责清理,还是被调用者清理)、函数名称的修饰方法等等。基本上我们最常见的调用约定就是cdecl和stdcall两种。
    cdecl规定函数参数列表以从右到左的方式入栈,且由函数的调用者负责清除栈帧上的参数。stdcall的参数入栈方式与cdecl一致,但函数返回时是由被调用者自己负责清理栈帧。而且stdcall是Win32 API函数所使用的调用约定
    参考:
      https://zhidao.baidu.com/question/1371711400354314219.html
      https://www.cnblogs.com/zhangxian/articles/4586793.html
    from ctypes import CDLL
    
    if __name__ == '__main__':
        h = CDLL('msvcrt.dll')
        h.printf('a=%d,b=%d,a+b=%d', 1, 2, 1 + 2)
  • 相关阅读:
    个人博客
    个人博客
    5.4
    4.30
    4.29
    4.28
    4.27
    4.26
    4.25
    4.24
  • 原文地址:https://www.cnblogs.com/zhanghaibin16/p/13367073.html
Copyright © 2011-2022 走看看