【问题标题】:Calling function from dll in Python在 Python 中从 dll 调用函数
【发布时间】: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 用于哪个系统的问题?

标签: python dll ctypes


【解决方案1】:

32-但应用程序无法在 64 位上读取或写入 c:\windows\system32 以防止使用或损坏那里的 64 位 DLL。 32 位应用程序被重定向到 c:\windows\syswow64。将您的 32 位 DLL 放在那里并简单地使用:

dll = WinDLL('dllname')

路径不是必需的,因为该目录是 DLL 的标准搜索路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多