导入dll文件时python ctypes失败

时间:2012-07-05 18:33:24

标签: python dll ctypes

我是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进行分析。任何帮助都非常感谢!

3 个答案:

答案 0 :(得分:1)

我将DLL UdfManagerPython.dll加载到Dependency 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 is only supported for Python 2.3 onwards

我不知道这个DLL来自哪里。我用Google搜索了它的名字,得到了四个结果,其中一个是这个问题。

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

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

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

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> l = CDLL("UdfManagerPython.dll")
>>> l.initPyUdfNumber()
Fatal Python error: Interpreter not initialized (version mismatch?)

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

我用Google搜索了此错误消息的第一行,我从大多数结果中得到的重复主题是此错误表明您正在尝试加载与一个版本的Python链接的扩展模块与不同版本的Python

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

答案 1 :(得分:0)

WinDll应全部小写。

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

答案 2 :(得分:0)

尝试WinDLLCDLL

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