gpt4 book ai didi

python - 在 Python 3 中执行 Windll.version.GetFileVersionInfoSizeA() 失败

转载 作者:行者123 更新时间:2023-12-01 06:40:48 27 4
gpt4 key购买 nike

我正在尝试在 python ctypes 中执行 windll.version.GetFileVersionInfoSizeA()。我正在执行以下代码:

_GetFileVersionInfoSizeA = ctypes.windll.version.GetFileVersionInfoSizeA
_GetFileVersionInfoSizeA.argtypes = [ctypes.c_char_p, ctypes.c_void_p]
_GetFileVersionInfoSizeA.restype = ctypes.c_uint32
_GetFileVersionInfoSizeA.errcheck = RaiseIfZero # RaiseIfZero is a function to raise error
# lptstrFilename is the file path
dwLen = _GetFileVersionInfoSizeA(lptstrFilename, None)

此代码在 python 2 中完美运行,但在 python 3.8 中不起作用。它给出以下错误:

argument 1: <class 'TypeError'>: wrong type

根据msdn doc对于 GetFileVersionInfoSizeA,第二个参数应该是:

"A pointer to a variable that the function sets to zero."


我尝试了以下代码,但它给出了与以前相同的错误。

dwLen = _GetFileVersionInfoSizeA(lptstrFilename, LPVOID)

我不确定我错过了什么。
注意 - 这是我第一次使用 ctypes

最佳答案

python2中,可以使用两种类型来表示字符串。 字符串Unicode字符串。因此c_char_p ctypes类型用于表示python2字符串类型c_wchar_p ctypes 类型用于表示 python2 unicode 字符串类型

但是在python3中只有一种字符串类型。因此,c_wchar_p ctypes 类型用于表示 python3 string 类型,c_char_p ctypes 类型用于表示 python3 bytes > 类型。

您可以在 python 2 中找到基本数据类型和 python 3文档。

所以你可以这样做

dwLen = _GetFileVersionInfoSizeA(your_file_name.encode(), None)

关于python - 在 Python 3 中执行 Windll.version.GetFileVersionInfoSizeA() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59464725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com