[英]Interacting with AURA_SDK.dll through python using ctypes
我正在嘗試使用 python 控制我的 ASUS ROG Flare 鍵盤 LED colors。我從 ASUS 網站下載了 Aura Software Developer Kit。 鏈接在這里: https://www.asus.com/campaign/aura/us/SDK.php套件內有一個菜單指南和一個名為 AURA_SDK.dll 的 dll 文件。 該指南說,使用提到的 dll 可以控制鍵盤。
我正在使用 ctypes python package 並成功加載 package,但是當我調用第一個 function 以獲取鍵盤控制時,程序失敗,因為我不完全理解 function 需要運行的參數。
我正在嘗試的代碼:
import ctypes
path_dll = 'AURA_SDK.dll'
dll = ctypes.cdll.LoadLibrary(path_dll)
res = dll.CreateClaymoreKeyboard() # fails here
關於如何創建此參數的任何想法?
提前致謝。
應該這樣做。 養成的好習慣是始終為您調用的函數定義.argtypes
和.restype
。 這將確保參數在 Python 和 C 類型之間正確轉換,並提供更好的錯誤檢查以幫助發現不正確的行為。
wintypes 中也有許多預定義的wintypes
類型,因此您不必猜測參數使用什么 ctype-type。
另請注意, 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 success
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.