在 Python 里面使用 ctypes 载入 dll 时,如果这个 dll 还依赖于其它的 dll 的话,这些相关的 dll 也得要能被 Python 的进程访问到。如果访问不到就会报以下错误:
import sys
sys.path.append('.')
import ctypes
dll=ctypes.cdll.LoadLibrary('dll2python.dll')
Traceback (most recent call last):
return self._dlltype(name)
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126]
在使用简单的谷歌搜索大法之后,得知:
导致这样的问题有两个最主要的原因
1 系统无法定位到你的DLL 动态库
2 你的DLL 动态库依赖于其他其他DLL 动态库无法被系统找到。
问题一很好解决, 在导入动态链接时,直接加入地址链接:
dll=ctypes.cdll.LoadLibrary('E://code text/python/dll2python/python call/dll2python.dll')
基本上问题就解决了
有一点让笔者不解的是,笔者已经导入了当前路径
import sys
sys.path.append('.')
系统竟然都找不到,还需要使用绝对路径才能被检索到。 有知道原因的同学请解释一下。
对于问题二, 最基本的解决方式是把相关的DLL 动态库也导进来,这样问题基本就能解决。
对于无法解决的同学,引起这类问题的主要原因在于你的目标主机没有安装 C++runtime 。 通过安装 C++ runtime ,或者使用静态链接库的方式可以解决。