ToUnicodeEx() 总是 returns python 中的 0

ToUnicodeEx() always returns 0 in python

我试图在 python 中包装 C++ 函数 ToUnicodeEx(),但它无法正常工作,总是 returns 0.
在 MSDN 0 上表示:

The specified virtual key has no translation for the current state of the keyboard. Nothing was written to the buffer specified by pwszBuff.

from ctypes import *
_ToUnicodeEx = WinDLL('user32').ToUnicodeEx
_ToUnicodeEx.argtypes = [c_uint,c_uint,c_byte,c_wchar_p,c_int,c_uint,c_int]
_ToUnicodeEx.restype = c_int
def ToUn(vk,sc,kst,wfl,hkid):
    #b - is as in C++ pwszBuff 
    b = create_unicode_buffer(5)
    print(_ToUnicodeEx(vk,sc,kst,b,5,wfl,hkid))
    return b.value
#It must print "a" but prints "".
print(ToUn(65,0,0,0,1033))

我是不是做错了什么,总是returns0?
P.S。在 C# 中工作,使用相同的参数...

这更符合 ToUnicodeEx 的 MSDN 文档:

_ToUnicodeEx.argtypes = [c_uint,c_uint,POINTER(c_char),POINTER(c_wchar),c_int,c_uint,c_void_p]

c_wchar_p 假定空终止并且 c_void_p 适用于句柄。第三个参数应该是一个 256 字节的数组,最后一个参数是可选的,所以我尝试了这个并得到了你想要的结果。我承认我不了解函数的复杂性,所以我不知道什么适合参数。我刚好满足类型要求。

from ctypes import *
_ToUnicodeEx = WinDLL('user32').ToUnicodeEx
_ToUnicodeEx.argtypes = [c_uint,c_uint,POINTER(c_char),POINTER(c_wchar),c_int,c_uint,c_void_p]
_ToUnicodeEx.restype = c_int
def ToUn(vk,sc,wfl,hkid):
    kst = create_string_buffer(256)
    b = create_unicode_buffer(5)
    print(_ToUnicodeEx(vk,sc,kst,b,5,wfl,hkid))
    return b.value
print(ToUn(65,0,0,None))

输出:

1
a