我获得了一个由另一个人制作的DLL,我无法访问其原始的.cpp和.h文件。基于描述DLL函数名称的描述文件,我将使用ctypes用Python调用它们:
IStorageEntitySas
但是,我没有使用此错误消息调用这些函数:
from ctypes import *
cppdll = WinDLL("C:\\VS_projects\\MusicServer_Flask\\NetServerInterface.dll")
py_InitNetwork = cppdll.InitNetwork
我认为该功能的名称可能存在一些问题。所以我用Dependency Walker来检查dll函数的名字。正如所料,函数的名称很奇怪(Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35-32\lib\ctypes\__init__.py", line 360, in __getattr__
func = self.__getitem__(name)
File "C:\Python35-32\lib\ctypes\__init__.py", line 365, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'InitNetwork' not found
变为InitNetwork
):
我在网上搜索,发现制作这个DLL时编译过程中出现了问题。
这是我的问题:让提供程序重新编译DLL是解决此问题的唯一方法吗?还是有另一种方法可以让我在Python中调用这些函数吗?
答案 0 :(得分:0)
DLL似乎提供了C ++函数的接口。这就是“奇怪”的名字来自。
重新编译无济于事。
...还有另一种让我在Python中调用这些函数的方法吗?
可以使用C ++编写一个包装DLL,它暴露了一个C接口。