Типы Python и недостаточно аргументов (4 байта отсутствуют) - PullRequest
4 голосов
/ 22 сентября 2009

Я пытаюсь вызвать функцию:

void FormatError (HRESULT hrError,PCHAR pszText);

из пользовательского dll, использующего windll.

c_p = c_char_p()
windll.thedll.FormatError(errcode, c_p)

Результат:

ValueError: Procedure probably called with not enough arguments (4 bytes missing)

Использование cdll вместо этого увеличивает счетчик пропущенных байтов до 12. Код ошибки выше - это код ошибки, возвращенный другой функцией из той же библиотеки DLL. Как мне правильно позвонить?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2009

По крайней мере, вы получите больше описательных ошибок, если правильно настроите argtypes и restype.

Попробуйте сделать это так:

windll.thedll.FormatError.argtypes = [ctypes.HRESULT, ctypes.c_char_p]
windll.thedll.FormatError.restype  = None

Существует также очень хороший шанс, что вы используете неправильное соглашение о вызовах - посмотрите в разделе «Функции вызова» и в разделе «Загрузка библиотек» , чтобы узнать, как использовать другой вызов условность.

0 голосов
/ 22 сентября 2009

На самом деле я думаю, что вы хотите использовать FormatError, предоставленный ctypes

http://docs.python.org/library/ctypes.html#ctypes.FormatError

ctypes.FormatError ([код])

Только для Windows: возвращает текстовое описание кода ошибки. Если код ошибки не указан, последний код ошибки используется при вызове API-функция Windows GetLastError.

0 голосов
/ 22 сентября 2009

Вы пытались использовать ctypes.HRESULT ?

...