Python调用DLL:TypeError:';图书馆装载机&x27;对象不可调用

Python调用DLL:TypeError:';图书馆装载机&x27;对象不可调用,python,dll,ctypes,Python,Dll,Ctypes,我正在尝试使用ctypes将DLL导入Python2.7.12 64位。为了缩小错误的范围,我使用了Microsoft的MathLibrary DLL示例,并根据这些说明构建了自己的DLL()。我将其构建为x64版本,并将生成的dll复制到C:\root以消除路径长度或拼写错误问题。我的机器运行64位Windows 7 Pro 我的python代码是: from ctypes import cdll, windll, c_long, c_int, create_string_buffer te

我正在尝试使用ctypes将DLL导入Python2.7.12 64位。为了缩小错误的范围,我使用了Microsoft的MathLibrary DLL示例,并根据这些说明构建了自己的DLL()。我将其构建为x64版本,并将生成的dll复制到C:\root以消除路径长度或拼写错误问题。我的机器运行64位Windows 7 Pro

我的python代码是:

from ctypes import cdll, windll, c_long, c_int, create_string_buffer

test_dll = windll("C:\\MathLibrary.dll")

add = test_dll.add
运行时,它会报告以下内容:

Traceback (most recent call last):
  File "C:\temp.py", line 3, in <module>
    test_dll = windll("C:\\MathLibrary.dll")
TypeError: 'LibraryLoader' object is not callable

Windell是ctypes模块中的一个对象。它不能像函数一样调用(“对象不可调用”)。您可能希望引用它的一个方法并调用它

test_dll = windll.<func_name>("C:\\MathLibrary.dll")
test\u dll=windl.(“C:\\MathLibrary.dll”)

您可以使用
\uuuu dir\uuuu()
查看对象属性和方法,或者更好的是,检查。

使用“cdll”会产生类似的错误消息“TypeError:“LibraryLoader”对象不可调用”。使用'CDLL'效果很好,因此问题在于'CDLL'的大小写敏感,也可能是'windle'。

一般来说,最好使用
ctypes.windle(“C:\\MathLibrary.dll”)
。或者,如果库使用
SetLastError
,则使用
ctypes.windell(“C:\\MathLibrary.dll”,使用\u last\u error=True)
。如果坚持使用
windle
加载DLL,请使用
windle.LoadLibrary(“C:\\MathLibrary.DLL”)
——一种调用
windle
但不允许向构造函数传递参数的方法,或者使用
windle[“C:\\MathLibrary.DLL”]
getattr(windle,“C:\\MathLibrary.DLL”)
,两者都缓存加载的DLL。
test_dll = windll.<func_name>("C:\\MathLibrary.dll")