我正在尝试加载一些我想通过Python脚本控制的硬件的专有DLL。为此,我使用了ctypes
包中的CDLL
模块。我遇到了一个奇怪的问题,调用CDLL
时必须大写,否则函数调用不起作用
执行以下操作会引发错误:
from ctypes import CDLL
mcldll = cdll(r'C:\Program Files\Mad City Labs\NanoDrive\Madlib.dll') # using lower case
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-4ef065672c09> in <module>
1 from ctypes import CDLL
2
----> 3 mcldll = cdll(r'C:\Program Files\Mad City Labs\NanoDrive\Madlib.dll')
TypeError: 'LibraryLoader' object is not callable
但这样做很好:
from ctypes import CDLL
mcldll = CDLL(r'C:\Program Files\Mad City Labs\NanoDrive\Madlib.dll') # using upper case
这是我第一次在Python中导入或调用模块时遇到区分大小写的问题。是什么导致了这种行为
所有Python都区分大小写。您似乎注意到的是,python类或函数在所有CAP中都是不常见的
根据Python PEP指南(https://www.python.org/dev/peps/pep-0008/#class-names)“类名通常应使用大写字母约定。”
在ctypes的源代码中,我们可以看到CDLL只是一个类定义
因此,这似乎很不寻常。我想问题是如何正确地用大写字母“C DLL”这个词。所以他们碰巧选择了“CDLL”
此外,CDLL是一个类名,而不是一个模块名(全部为小写https://www.python.org/dev/peps/pep-0008/#package-and-module-names)
Edit:作为对下面评论的回应,在ctypes中似乎有一个全小写的对象
cdll
。我不是ctypes方面的专家,但这似乎是加载库的另一种方法我不完全确定API的区别,但小写
cdll
用于以下语法:有关详细信息,请参阅完整文档(https://docs.python.org/3/library/ctypes.html)
相关问题 更多 >
编程相关推荐