2024-10-01 09:34:17 发布
网友
我很难理解如何从Python中现有的dll调用dll函数。在
OTAClient = cdll.LoadLibrary("C:\PATH\OTAClient.dll") connect = OTAClientDLL.TDConnection()
我读到一些被编译器弄乱了名字的东西。 有什么建议吗?在
这可能是因为编译器弄乱了函数名。解决这个问题有两种方法:
阅读以下内容(来自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对象来访问:
如果不确定函数名,请查找链接.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")
这可能是因为编译器弄乱了函数名。解决这个问题有两种方法:
阅读以下内容(来自http://docs.python.org/2/library/ctypes.html)
有时,dll导出的函数名不是有效的Python标识符,比如“?”??2@YAPAXI@Z". 在这种情况下,必须使用getattr()检索函数:
在Windows上,有些DLL不是按名称而是按序号导出函数。这些函数可以通过使用序号索引dll对象来访问:
^{pr2}$如果不确定函数名,请查找链接.exe垃圾箱.exe. 这些可以在visualstudio安装中找到,它们会转储dll中可用的所有函数。你可以对结果进行grep。在
DLL实际上是一个COM DLL。 comtypes需要使用这种类型的DLL而不是ctypes。 确保download comtypes
相关问题 更多 >
编程相关推荐