我试图控制我的ASUS耀斑键盘LED颜色使用python。我从ASUS网站下载了Aura软件开发工具包。链接这里:https://www.asus.com/campaign/aura/us/SDK.php在工具包中有一个菜单指南和一个名为AURA_SDK.dll的dll文件。指南说,通过上述dll,键盘可以被控制。
我正在使用ctype python包并成功地加载了包,但是当我调用第一个函数以获得键盘上的控制时,程序失败了,因为我不完全理解函数需要运行的参数。
指南提供的文件:

我正在尝试的代码:
import ctypes
path_dll = 'AURA_SDK.dll'
dll = ctypes.cdll.LoadLibrary(path_dll)
res = dll.CreateClaymoreKeyboard() # fails here关于如何建立这个论点,有什么想法吗?
提前谢谢。
发布于 2020-12-22 21:58:31
这样就行了。一个很好的习惯就是为您调用的函数定义.argtypes和.restype。这将确保参数在Python和C类型之间正确转换,并提供更好的错误检查,以帮助捕获错误操作。
wintypes中也有许多预定义的Windows类型,所以您不必猜测参数使用什么类型。
还请注意,WINAPI被定义为__stdcall调用约定,应该使用WinDLL而不是CDLL来加载DLL。在64位系统上,标准C调用约定(__cdecl)和__stdcall之间没有区别,但如果您使用32位Python或希望将可移植性转换为32位Python,这将很重要。
import ctypes as ct
from ctypes import wintypes as w
dll = ct.WinDLL('./AURA_SDK') # Use WinDLL for WINAPI calls.
dll.CreateClaymoreKeyboard.argtypes = ct.POINTER(ct.c_void_p), # tuple of arguments
dll.CreateClaymoreKeyboard.restype = w.DWORD
handle = ct.c_void_p() # Make an instance to pass by reference and receive the handle.
res = dll.CreateClaymoreKeyboard(ct.byref(handle))
# res is non-zero on successhttps://stackoverflow.com/questions/65412202
复制相似问题