Вызов C++ DLL API не увенчался успехом – как решить проблемуPython

Программы на Python
Ответить
Anonymous
 Вызов C++ DLL API не увенчался успехом – как решить проблему

Сообщение Anonymous »

У меня есть DLL C++, и я использую инструмент dumpbin, чтобы получить в ней одно из имен API:
ordinal hint RVA name

56 3D 00005BB0 GetUserPass

У меня есть доступ к файлу заголовка кода, и мне нужно использовать функцию DLL, указанную ниже (в корзине отображается этот формат API, хотя DLL генерируется с помощью C++):
USER_API USER::ResultCode DD_STDCALL GetUserPass();

Я использую приведенный ниже код для вызова API:
import ctypes
from ctypes import wintypes, byref, c_uint32, c_int, c_int32

dll_path = r"C:\\Program Files (x86)\\Software\\UserComm.dll"

user = ctypes.cdll.LoadLibrary(dll_path)
ResultCode = c_uint32

user.GetUserPass.restype = ResultCode

rc = user.GetUserPass()
print("GetUserPass:", "Success" if rc == 0 else f"Error {rc}")

Я получаю следующую ошибку при выполнении приведенного выше кода Python:
GetUserPass: Error 3758100487

Когда я беру полную корзину C++ DLL, только некоторые функции имеют искаженные имена, в то время как многие другие, такие как GetUserPass, этого не делают. Может ли это быть проблемой, связанной с невозможностью использовать имя функции API C++ DLL непосредственно в Python без интерфейса C? Как мы можем решить эту проблему?
Я не могу получить успешный код возврата из API — в случае успеха он должен вернуть 0.
Как я могу добиться того же и в чем проблема на моей стороне?
Когда я использую интерфейс командной строки, я получаю точку ниже:
>>> print(user.GetUserPass)


>>> dir(user.GetUserPass)
['__bool__', '__call__', '__class__', '__ctypes_from_outparam__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_b_base_', '_b_needsfree_', '_flags_', '_objects', '_restype_', 'argtypes', 'errcheck', 'restype']
>>>


Подробнее здесь: https://stackoverflow.com/questions/799 ... -the-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»