pyton中cdll windll oledll 的区别

本文介绍了Python中ctypes库的cdll、windll和oledll的区别,它们分别对应不同的C/C++调用约定。cdll使用cdecl约定,参数从右到左入栈,调用者清理堆栈;windll和oledll使用stdcall约定,参数同样从右到左入栈,但被调用者负责清理。了解这些调用约定对于正确调用DLL函数至关重要。
摘要由CSDN通过智能技术生成

看libsvm的时候看到了Python中的高级调用方法,用ctypes原生库来调用dll程序,接着看到了cdll,windll,oledll,突然觉得自己在程序的编译连接方面有所欠缺,得学习学习。

首先看dll是什么东西。

dll是动态链接库(dynamic link library),是微软对shared library的实现,其概念是把许多程序共享的函数放到一个文件当中,当初次被调用是,放到内存的共享块当中,所有的进程都可以访问该块内存,这样就节省了宝贵的内存空间。linux中对应的文件的后缀一般为so,例如C的标准库一般叫libc.so。dll本质上和exe并无不同,它可以有数据和程序块(这提供了一种相当危险的IPC),但是dll无法直接运行,它需要有exe文件来载入内存并调用。更加详细的描述见于http://en.wikipedia.org/wiki/Dynamic-link_library。当编译器编译我们编写的程序时要经历link环节,就是确定一系列被调用函数的入口,连接器并不直接连接我们自己编写的目标文件和dll文件,而是链接目标文件和lib文件,lib文件可以粗略的认为是dll中各个函数一个目录,各个函数在dll中的位置,所以在使用opencv的时候,需要把各种lib文件添加到工程,并且把dll添加到系统路径。

言归正传,看看cdll,windll,oledll是什么。这三个修饰符其实是C\C+

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值