天天看點

python格式字元串的參數不足_Python ctypes和參數不足(缺少4個位元組)

python格式字元串的參數不足_Python ctypes和參數不足(缺少4個位元組)

The function i'm trying to call is:

void FormatError (HRESULT hrError,PCHAR pszText);

from a custom dll using windll.

c_p = c_char_p()

windll.thedll.FormatError(errcode, c_p)

Results in:

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

Using cdll instead increases the bytes missing counter to 12. errcode above is the errercode returned from another function out of the same dll. How do I get the call right?

解決方案

At the very least, you'll get more descriptive errors if you properly set up the argtypes and the restype.

Try doing it this way:

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

windll.thedll.FormatError.restype = None

There's also a very good chance you are using the wrong calling convention -- check out the Calling Functions section and the Loading Libraries section for details on how to use a different calling convention.