在Windows Python 3.4中加载.dll文件

时间:2015-10-30 02:47:22

标签: python c++ python-3.x anaconda ctypes

目前,我正在使用Anaconda Suite中的Python 3.4。我有一个名为" libPiCam.dll"在我的工作目录中,我试图以这种方式加载它:

from ctypes import cdll

def load(x):
    """Loads DLL library where argument is location of library"""
    x = cdll.LoadLibrary(x)
    return x

lib = load("PiCamLib")

但是在这样做的时候,我得到了这个追踪器

Traceback (most recent call last):

  File "<ipython-input-27-8d86fac88101>", line 1, in <module>
    runfile('C:/Users/User/Documents/Python Scripts/PicamCode/PixisTest.py', wdir='C:/Users/User/Documents/Python Scripts/PicamCode')

  File "C:\Users\User\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
    execfile(filename, namespace)

  File "C:\Users\User\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile
    exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

  File "C:/Users/User/Documents/Python Scripts/PicamCode/PixisTest.py", line 49, in <module>
    piFunction = load(piFunctionLib)

  File "C:/Users/User/Documents/Python Scripts/PicamCode/PixisTest.py", line 32, in load
    x = cdll.LoadLibrary(x)

  File "C:\Users\User\Anaconda3\lib\ctypes\__init__.py", line 429, in LoadLibrary
    return self._dlltype(name)

  File "C:\Users\User\Anaconda3\lib\ctypes\__init__.py", line 351, in __init__
    self._handle = _dlopen(self._name, mode)

OSError: [WinError 193] %1 is not a valid Win32 application

最让我困惑的是我有一个名为&#34; PiCam.dll&#34;的文件。并以这种方式加载它:

picamLibrary = 'picam'
picam = cdll.LoadLibrary(picamLibrary)

使用上面的eLoad方法加载。这没有错误。我尝试将我的调用加载libPiCam以同样的方式,但我得到了相同的错误。作为背景,我创建并编译了&#34; libPiCam.dll&#34;来自C ++文件的文件以包装它,允许我从Python调用C ++函数(我跟着Calling C/C++ from python?)。

那么,我该怎么办?

1 个答案:

答案 0 :(得分:1)

我注意到命名并不完全一致:libPiCam.dll vs "PiCamLib"的问题不起作用,PiCam.dll vs "picam"的问题不起作用。这是案件的问题吗?你试过"libpicam"吗?

否则,我不会对Anaconda发行本身的问题感到惊讶。我有几个问题,当Anaconda与Windows交互时,会发生错误。 IE浏览器。 c ++编译器工作不正常,无法导入pywin32,除非我出于某种原因使用IPython运行.py脚本等。