在Python中调用DLL函数
我很难理解如何从Python中现有的dll调用dll函数在Python中调用DLL函数,python,dll,ctypes,Python,Dll,Ctypes,我很难理解如何从Python中现有的dll调用dll函数 OTAClient = cdll.LoadLibrary("C:\PATH\OTAClient.dll") connect = OTAClientDLL.TDConnection() 我读到一些东西,名字被编译器弄乱了。 有什么建议吗?这可能是因为编译器弄乱了函数名。解决这个问题有两种方法: 修复代码以告诉编译器不要损坏名称。(查找添加外部引用) 找到损坏的名称并从python中调用(请参见下面的描述) 阅读以下内容(摘自) 有时,D
OTAClient = cdll.LoadLibrary("C:\PATH\OTAClient.dll")
connect = OTAClientDLL.TDConnection()
我读到一些东西,名字被编译器弄乱了。
有什么建议吗?这可能是因为编译器弄乱了函数名。解决这个问题有两种方法:
>>>
>>> getattr(cdll.msvcrt, "??2@YAPAXI@Z")
<_FuncPtr object at 0x...>
>>>
>
>>>getattr(cdll.msvcrt,“?”??2@YAPAXI@Z“)
>>>
在Windows上,某些DLL不是按名称而是按顺序导出函数。这些函数可以通过使用序号索引dll对象来访问:
>>>
>>> cdll.kernel32[1]
<_FuncPtr object at 0x...>
>>> cdll.kernel32[0]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "ctypes.py", line 310, in __getitem__
func = _StdcallFuncPtr(name, self)
AttributeError: function ordinal 0 not found
>>>
>
>>>cdll.kernel32[1]
>>>cdll.kernel32[0]
回溯(最近一次呼叫最后一次):
文件“”,第1行,是否在中?
文件“ctypes.py”,第310行,在__
func=\u StdcallFuncPtr(名称,self)
AttributeError:未找到函数序号0
>>>
如果不确定函数名可能是什么,请查找link.exe dumpbin.exe。这些都是在VisualStudio安装中找到的,它们转储dll中可用的所有函数。您可以对结果运行grep。该DLL实际上是一个COM DLL。 需要comtypes来使用这种类型的DLL而不是ctypes。 确保
我以前查看过该文档,但没有帮助。
>>>
>>> cdll.kernel32[1]
<_FuncPtr object at 0x...>
>>> cdll.kernel32[0]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "ctypes.py", line 310, in __getitem__
func = _StdcallFuncPtr(name, self)
AttributeError: function ordinal 0 not found
>>>
from comtypes.client import CreateObject
OTAClientDLL = comtypes.client.GetModule("C:\PATH\OTAClient.dll")