使用ctypes时,DLL函数的名称错误

时间:2018-05-05 13:31:59

标签: python c++ c dll ctypes

我获得了一个由另一个人制作的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):

enter image description here

我在网上搜索,发现制作这个DLL时编译过程中出现了问题。

这是我的问题:让提供程序重新编译DLL是解决此问题的唯一方法吗?还是有另一种方法可以让我在Python中调用这些函数吗?

1 个答案:

答案 0 :(得分:0)

DLL似乎提供了C ++函数的接口。这就是“奇怪”的名字来自。

重新编译无济于事。

  

...还有另一种让我在Python中调用这些函数的方法吗?

可以使用C ++编写一个包装DLL,它暴露了一个C接口。