在 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 存储过程?

在 Python 中从同一模块内的字符串调用函数?

如何在 Django 中从 JavaScript 调用 Python 函数?

C# 调用需要双精度数组和结构作为输入的 C++ DLL 函数

使用 python 和调用函数自省 C++ dll