在Python中调用DLL函数

2024-10-01 09:34:17 发布

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

我很难理解如何从Python中现有的dll调用dll函数。在

OTAClient = cdll.LoadLibrary("C:\PATH\OTAClient.dll")
connect = OTAClientDLL.TDConnection()

^{pr2}$

我读到一些被编译器弄乱了名字的东西。 有什么建议吗?在


Tags: path函数编译器connect名字建议dllpr2
2条回答

这可能是因为编译器弄乱了函数名。解决这个问题有两种方法:

  1. 修复代码以告诉编译器不要弄乱名称。(查找添加外部引用)
  2. 找到损坏的名称并从python调用它(参见下面的描述)

阅读以下内容(来自http://docs.python.org/2/library/ctypes.html

有时,dll导出的函数名不是有效的Python标识符,比如“?”??2@YAPAXI@Z". 在这种情况下,必须使用getattr()检索函数:

>>>
>>> getattr(cdll.msvcrt, "??2@YAPAXI@Z") 
<_FuncPtr object at 0x...>
>>>

在Windows上,有些DLL不是按名称而是按序号导出函数。这些函数可以通过使用序号索引dll对象来访问:

^{pr2}$

如果不确定函数名,请查找链接.exe垃圾箱.exe. 这些可以在visualstudio安装中找到,它们会转储dll中可用的所有函数。你可以对结果进行grep。在

DLL实际上是一个COM DLL。 comtypes需要使用这种类型的DLL而不是ctypes。 确保download comtypes

from comtypes.client import CreateObject

OTAClientDLL = comtypes.client.GetModule("C:\PATH\OTAClient.dll")

相关问题 更多 >