Вы уже загрузили SDK
dll, дополнительный атрибут не требуется.
Имена, экспортируемые из SDK.dll
, являются атрибутами объекта, возвращенного из ctypes.cdll.LoadLibrary()
(экземпляр CDLL
класса ), который вы присвоили имени dll
.
Поэтому, если SDK.dll
экспортирует функцию с именем Service
, вы можете вызвать ее с помощью:
dll.Service()
См. Доступ к функциям из загруженных библиотек раздел документации ctypes
.
Учтите, что ctypes.cdll
ожидает, что библиотеки DLL будут использовать объявлений экспорта функций C . Пространства имен C ++ не экспортируются.
Вы также можете иметь дело с библиотекой DLL, которая использует соглашения stdcall
только для Windows, и в этот момент вам нужно использовать ctypes.windll
(предполагается, что функции возвращают int
по умолчанию) или ctypes.oledll
(предполагает HRESULT
возвращаемые значения) библиотечные загрузчики. Нет простого способа определить из одной только DLL , какое соглашение о вызовах оно ожидает. Если у вас есть соответствующие заголовочные файлы .h
(я ожидаю, что SDK будет иметь их), то посмотрите, используют ли определенные функции __cdecl
или __stdcall
. В противном случае, просто попробуйте использовать DLL с cdll
, и если вы получите ValueError: Procedure called with not enough arguments (<n> bytes missing) or wrong calling convention
, используйте вместо нее cdll.windll
.