如何从python中查找dll函数?

如何从python中查找dll函数?,python,dll,ctypes,Python,Dll,Ctypes,我正在尝试使用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

我正在尝试使用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
回溯(最近一次呼叫最后一次):
文件“d:\Fold1\project\test.py”,第3行,在
SdkService=dll.SDK.Service()
文件“C:\Users\Saeed\AppData\Local\Programs\Python\36\lib\ctypes\\uuuuu init\uuuu.py”,第361行,在__
func=self.\uuuu getitem\uuuuu(名称)
文件“C:\Users\Saeed\AppData\Local\Programs\Python\36\lib\ctypes\\uuuuu init\uuuuu.py”,第366行,在uu getitem中__
func=self.\u FuncPtr((名称或顺序,self))
AttributeError:未找到函数“SDK”
现在如何从python中找到函数?
或任何其他访问函数的计划?

您已经加载了
SDK
dll,不需要附加属性

SDK.dll
导出的名称是从
ctypes.cdll.LoadLibrary()
(的实例)返回的对象的属性,您将该对象分配给名称
dll

因此,如果
SDK.dll
导出一个名为
Service
的函数,您可以使用以下方法调用它:

dll.Service()
请参阅
c类型
文档的

考虑到
ctypes.cdll
希望DLL使用C函数导出声明。不输出C++命名空间。
您还可能正在处理一个仅使用Windows
stdcall
约定的DLL,此时您需要使用
ctypes.windell
(默认情况下假定函数返回
int
)或
ctypes.oledell
(假定
HRESULT
返回值)库加载器。仅仅从DLL中检测调用约定所期望的内容是不容易的。如果您有相应的
.h
头文件(我希望SDK会有这些头文件),那么请查看定义的函数是否使用
\uuuu cdecl
\uu stdcall
。否则,只需尝试将DLL与
cdll
一起使用,如果得到
ValueError:Procedure调用时参数不足(缺少字节)或调用约定错误
异常,请切换到使用
cdll.windl

函数属性提供目录:Method:SDK.Service.UserInfo(System.String国家代码,System.Int32出生年份)赛义德:文档似乎使用了C++名称空间,这些名称不是导出的名称的一部分。根据项目配置,将导出“代码<代码> UserInfo >代码>。<代码> cType < /Cord>使用C约定,而不是C++约定。@赛义德:一些DLL按序号导出名称,请参阅我链接的文档。@赛义德:如果您是使用Windows并安装VisualStudio,我认为您可以使用
dumpbin/exports SDK.dll
查看导出的名称。或者下载。请参阅