J'accède à une dll depuis Python à l'aide de la bibliothèque ctypes. Les fonctions de la dll sont accessibles par ordinal plutôt que par nom. Je peux inspecter la dll à l'aide de Dependency Walker et associer les ordinaux aux noms de fonction. Il existe une variable de numéro d'erreur globale dans la dll à laquelle je souhaite accéder. Dependency Walker montre qu'il a une valeur ordinale de 13.
Il semble qu'il n'y ait aucun moyen d'accéder à une variable globale par ordinal à l'aide de ctypes.
Si la variable globale était nommée, il semble que je pourrais faire quelque chose comme :
error_value = c_int.in_dll(my_dll_handle, "my_error_value") ( https://docs.python.org/3/library/ctypes.html#accessing-values-exported-from-dlls )
Des idées sur la façon dont j'accède à la variable globale étant donné seulement un ordinal ?
Je n'ai rien vu d'explicite dans la documentation, à part la syntaxe des fonctions accédées par ordinal. Grâce à l'expérimentation, les éléments suivants ont fonctionné :
Code d'essai :
int x = 5;
int func(int a) { return a*2; }
Exportation de fichier .DEF par ordinal:
EXPORTS
x @1 NONAME DATA
func @2 NONAME
Code Python :
>>> from ctypes import *
>>> test = CDLL('test')
>>> test[2](5) # Call ordinal 2 function.
10
>>> test[1] # Ordinal 1 thinks it is a function pointer.
<_FuncPtr object at 0x0000000002FEA048>
>>> cast(test[1],POINTER(c_int)).contents # cast?
c_long(5) # Worked!
>>> cast(test[1],POINTER(c_int)).contents.value
5
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots