我正在尝试使用ctypes从python访问dll。但是找不到功能!简单的代码是这样的:
from ctypes import cdll
dll=cdll.LoadLibrary("SDK.dll")
SdkService=dll.SDK.Service()
和回溯错误:
Traceback (most recent call last):
File "d:\Fold1\project\test.py", line 3, in <module>
SdkService=dll.SDK.Service()
File "C:\Users\Saeed\AppData\Local\Programs\Python\Python36\lib\ctypes\__init__.py", line 361, in __getattr__
func = self.__getitem__(name)
File "C:\Users\Saeed\AppData\Local\Programs\Python\Python36\lib\ctypes\__init__.py", line 366, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'SDK' not found
现在如何从python查找函数?或任何其他使用功能的计划?
您已经加载了SDK
dll,因此不需要其他属性。
从SDK.dll
导出的名称是从ctypes.cdll.LoadLibrary()
返回的对象的属性(CDLL
class的实例),将其分配给名称CDLL
。
因此,如果dll
导出名为SDK.dll
的函数,则可以使用:
Service
请参阅dll.Service()
文档的Accessing functions from loaded dlls section。
请考虑到ctypes
期望DLL使用C函数导出声明。 C ++名称空间不会导出。您可能还正在处理使用仅Windows ctypes.cdll
约定的DLL,此时您需要使用stdcall
(假定函数默认返回ctypes.windll
)或int
(假定ctypes.oledll
返回值)库加载程序。