簡體   English   中英

使用 ctypes 與 AURA_SDK.dll 到 python 交互

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM