Python ctypes和没有足够的参数(缺少4个字节)

时间:2009-09-22 08:37:39

标签: python windows ctypes

我试图打电话的功能是:

void FormatError (HRESULT hrError,PCHAR pszText);

来自使用windll的自定义dll。

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

结果:

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

使用cdll将字节丢失计数器增加到12.上面的errcode是从同一个dll中的另一个函数返回的errercode。如何正确接听电话?

3 个答案:

答案 0 :(得分:2)

至少,如果您正确设置argtypesrestype,则会出现更多描述性错误。

尝试这样做:

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

您使用错误的调用约定的可能性很大 - 请查看the Calling Functions sectionthe Loading Libraries section,了解有关如何使用其他调用约定的详细信息。

答案 1 :(得分:0)

您是否尝试过使用ctypes.HRESULT

答案 2 :(得分:0)

实际上我认为你想使用ctypes提供的FormatError

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

  

ctypes.FormatError([代码])

     

仅限Windows:返回错误代码的文本说明。如果   没有指定错误代码,通过调用使用最后一个错误代码   Windows api函数GetLastError。