2

我是 python 的新手,现在在 python 中导入 dll 时遇到问题。通过参考网上找到的一些提示,我尝试使用下面的 ctypes 并出现错误提示。

>>> import ctypes
>>> dl=ctypes.WinDll('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    dl=ctypes.WinDll('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')
AttributeError: 'module' object has no attribute 'WinDll'

>>> dl=ctypes.cdll.LoadLibrary('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    dl=ctypes.cdll.LoadLibrary('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')
  File "C:\Python27\lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] 

我做错了什么还是这个 dll 没有按照 python 标准编写脚本?我已上传到MediaFire供您分析。非常感谢任何帮助!

4

3 回答 3

1

我将 DLL 加载UdfManagerPython.dllDependency Walker中,它指出该 DLL 依赖于python22.dll. 当我试图在 Python (2.7) 解释器中加载这个 DLL 时,我得到一个消息框,它或多或少地告诉我同样的事情:

程序无法启动,因为您的计算机缺少 python22.dll。尝试重新安装程序以解决此问题。

所以看起来这个 DLL 是为了与 Python 2.2 一起使用,而不是你正在使用的 Python 2.7。

我没有安装 Python 2.2。如果你这样做了,也许你会收到不同的错误信息给我。

还值得指出的是,您不能ctypes与 Python 2.2 一起使用,因为ctypes仅支持 Python 2.3 onwards

我不知道这个 DLL 是从哪里来的。我用谷歌搜索了它的名字,得到了所有四个结果,其中一个就是这个问题。

顺便说一句,如果可以找到 DLL 本身但缺少 DLL 的依赖项,我会看到“找不到指定的模块”形式的错误。因此,如果您收到这样的消息,并且您确定 DLL 本身存在,请检查其依赖关系。

编辑:我尝试安装 Python 2.2 以查看是否可以加载此 DLL。安装 Python 2.2 后,您至少可以加载此 DLL,但如果您尝试调用其中任何一种init...方法,Python 会崩溃。(我不知道要传递什么参数,所以我没有传递它们。)

以下是我尝试调用其中一种方法时发生的情况:

Python 2.7.3(默认,2012 年 4 月 10 日,23:31:26)[MSC v.1500 32 位(英特尔)] 在 win32 上
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 从 ctypes 导入 *
>>> l = CDLL("UdfManagerPython.dll")
>>> l.initPyUdfNumber()
致命的 Python 错误:解释器未初始化(版本不匹配?)

此应用程序已请求运行时以不寻常的方式终止它。
请联系应用程序的支持团队以获取更多信息。

我用谷歌搜索了这条错误消息的第一行,我从大多数结果中得到的反复出现的主题是,这个错误表明你正在尝试加载一个扩展模块,该模块链接到一个版本的 Python 与不同版本的 Python。

所以在回答你在评论中的问题时,不,我不相信有办法在 Python 2.7 中加载这个 DLL。

于 2012-07-05T21:49:53.497 回答
0

WinDll 应该全部小写。

dl = ctypes.windll('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')
于 2012-07-05T18:39:26.567 回答
0

尝试WinDLLCDLL

我从未LoadLibrary直接在 中使用过ctypes,但看起来它仍然可能找不到 DLL。确保它在您的系统路径上。(或者在与 Python 模块相同的目录中。)

于 2012-07-05T19:09:06.417 回答