首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ctype通过python与AURA_SDK.dll交互

使用ctype通过python与AURA_SDK.dll交互
EN

Stack Overflow用户
提问于 2020-12-22 16:21:15
回答 1查看 148关注 0票数 0

我试图控制我的ASUS耀斑键盘LED颜色使用python。我从ASUS网站下载了Aura软件开发工具包。链接这里:https://www.asus.com/campaign/aura/us/SDK.php在工具包中有一个菜单指南和一个名为AURA_SDK.dll的dll文件。指南说,通过上述dll,键盘可以被控制。

我正在使用ctype python包并成功地加载了包,但是当我调用第一个函数以获得键盘上的控制时,程序失败了,因为我不完全理解函数需要运行的参数。

指南提供的文件:

我正在尝试的代码:

代码语言:javascript
复制
import ctypes
path_dll = 'AURA_SDK.dll'
dll = ctypes.cdll.LoadLibrary(path_dll)
res = dll.CreateClaymoreKeyboard() # fails here

关于如何建立这个论点,有什么想法吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 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,这将很重要。

代码语言:javascript
复制
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 success
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65412202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档