在 Python 中从 dll 调用函数
Posted
技术标签:
【中文标题】在 Python 中从 dll 调用函数【英文标题】:Calling function from dll in Python 【发布时间】:2021-08-13 14:34:01 【问题描述】:我正在尝试从我的 python 程序调用 .dll 文件中的一些函数,但我的 python 程序根本找不到这些函数。我使用了几种不同的 ctypes 方法,但没有得到任何结果。
我试过了:
self.dll = ctypes.WinDLL('C:\Windows\System32\DLLNAME')
self.dll = cdll.LoadLibrary('C:\Windows\System32\DLLNAME')
self.dll = CDLL('C:\Windows\System32\DLLNAME')
其中 DLLNAME 是我的 dll 的名称。我已经两次和三次检查了该 dll 是否在 win\sys32 库中并且具有相同的名称。
然后我会下一行说
self.dll.USB_PM()
其中 USB_PM() 是我需要访问的第一个函数的名称。这会引发错误
AttributeError: function 'USB_PM' not found
这是发生在课堂上,因此是自我。包括在那里。
PC:Windows 10
Python:3.9,32 位
DLL:MiniCircuits activex DLL,注册到 RegSvr32
DLL 可以找到here
【问题讨论】:
将反斜杠加倍"c:\\windows\\system32\\<name>"
或使用 r"c:\windows\system32\<name>
(raw string python 3)。否则你只是在转义反斜杠后面的字符。
@Neitsa 都试过了,还是找不到功能
您使用的是 64 位解释器吗?如果您使用的是 32 位,它将无法看到 \system32
,但会在 \syswow64
中搜索。
一切都设置为 32 位版本
您能否补充一下您的系统是什么(32 位与 64 位)您的 python 解释器是什么以及您的 DLL 用于哪个系统的问题?
【参考方案1】:
32-但应用程序无法在 64 位上读取或写入 c:\windows\system32 以防止使用或损坏那里的 64 位 DLL。 32 位应用程序被重定向到 c:\windows\syswow64。将您的 32 位 DLL 放在那里并简单地使用:
dll = WinDLL('dllname')
路径不是必需的,因为该目录是 DLL 的标准搜索路径。
【讨论】:
以上是关于在 Python 中从 dll 调用函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MicroPython 中从 C 调用 python 函数
如何在 Python 中从 Azure 函数调用 Cosmos DB 存储过程?
如何在 Django 中从 JavaScript 调用 Python 函数?