ctypes的use_errno参数与共享库类和函数原型之间的区别是什么?

1 投票
1 回答
523 浏览
提问于 2025-04-17 04:40

在Python中,有一些类,比如共享库类,包括CDLLOleDLLWinDLL,它们都有一个叫use_errno的参数。还有一些函数原型,比如CFUNCTYPEWINFUNCTYPE,它们也有这个参数。那么,我应该在什么时候以及对哪个组传递use_errno=True,而这样做的原因是什么呢?

1 个回答

0

这是关于它被纳入的错误追踪器

这个补丁为ctypes库中的外部函数添加了新的调用方式,方法是向CDLL或WinDLL构造函数传递'errno=True'或'GetLastError=True'。

如果使用CDLL(..., errno=True)或WinDLL(..., errno=True),那么在实际调用函数之前,CDLL或WinDLL实例中的函数对象会把C语言中的全局错误码errno设置为零,并在调用后把C语言中的全局errno值作为'errno'属性附加到函数对象上。这个属性是存储在每个线程的本地存储中的。

撰写回答