使用的问题ctypes.WinDLL()

2024-05-14 22:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让一个频谱分析仪程序的例子工作,但它有问题找到模块。这是我得到的错误

Traceback (most recent call last):
  File "C:\Users\user\Documents\Programs\Python_program_example.py", line 10, in <module>
    rsa300 = ctypes.WinDLL("C:\\Tektronix\\RSA306 API\\lib\\x64\\RSA300API.dll")
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

DLL存在,并且os.path.exists()使用该路径打印true,因此我不确定问题出在哪里。有人知道这是怎么回事吗?在


Tags: 模块inpyself程序initlib错误
2条回答

RSA300API.DLL可能在文件夹中有依赖项,因此在使用它之前,请使用os.chdir来设置工作目录,例如:

import os

os.chdir(r'C:\Tektronix\RSA306 API\lib\x64')
rsa300 = ctypes.WinDLL(r"C:\Tektronix\RSA306 API\lib\x64\RSA300API.dll")

检查其中一个samples,这似乎是访问它的推荐方法。在

或者,正如@eryksub所提到的,可以使用LoadLibraryExwin32api可用于获取句柄并将其传递给WinDLL,如下所示:

^{pr2}$

泰克应用工程师。在

Martin是对的,我们的dll在它所在的文件夹中有依赖关系。看起来您使用的是旧版本的API,它在C:\Tektronix\RSA306 API\lib\x64文件夹中有大量依赖项。新版本的API清除并合并了许多依赖关系,并重命名了许多函数,以提高清晰度和一致性。我们的软件工程师还决定在安装新版本时旧的API不会被覆盖,所以即使安装了最新的API,旧的脚本仍然可以工作。在

FWIW,我在所有RSA控制脚本的开头使用以下代码:

"""
################################################################
C:\Tektronix\RSA306 API\lib\x64 needs to be added to the 
PATH system environment variable
################################################################
"""
os.chdir("C:\\Tektronix\\RSA_API\\lib\\x64")
rsa = cdll.LoadLibrary("RSA_API.dll")

以下链接可下载RSA API的最新版本(截至2016年11月1日): http://www.tek.com/model/rsa306-software

下面是下载API文档的链接(截至2016年11月1日)。本文件附有Excel电子表格,其中概述了旧函数和新函数之间的区别: http://www.tek.com/spectrum-analyzer/rsa306-manual-6

相关问题 更多 >

    热门问题