stringvar - ¿Cómo se puede exponer un valor de C#definido a Python en un módulo Cython?
stringvar tkinter python 3 (1)
Me gustaría hacer las constantes enteras (ACTIVE_TAG, etc.) definidas aquí :
//island management, m_activationState1
#define ACTIVE_TAG 1
#define ISLAND_SLEEPING 2
#define WANTS_DEACTIVATION 3
#define DISABLE_DEACTIVATION 4
#define DISABLE_SIMULATION 5
disponible como atributos normales de un módulo definido por Cython en el que estoy trabajando, para que el código de la aplicación Python pueda acceder a ellos (para pasarlos a las API envueltas que se definen en términos de ellos).
He analizado la definición de estos con cdef como enteros o enumeraciones, pero ninguno de estos enfoques en realidad une el valor a un atributo en el módulo de Cython. ¿Qué otras opciones hay?
Aquí hay una forma que, aunque parezca tediosa, podría ser automatizada para cualquier archivo .h dado como entrada:
Paso 1. Obtenga todas las constantes que desee en un archivo, por ejemplo, bulletdefs.h
, que tiene #defines
pero con guiones bajos, por ejemplo:
#define _ACTIVE_TAG 1
#define _ISLAND_SLEEPING 2
#define _WANTS_DEACTIVATION 3
#define _DISABLE_DEACTIVATION 4
#define _DISABLE_SIMULATION 5
Paso 2. Inserte una sección en el archivo bullet.pyx
para su módulo, digamos bullet.pyx
:
cdef extern from "bulletdefs.h":
cdef int _ACTIVE_TAG
cdef int _ISLAND_SLEEPING
cdef int _WANTS_DEACTIVATION
cdef int _DISABLE_DEACTIVATION
cdef int _DISABLE_SIMULATION
ACTIVE_TAG = _ACTIVE_TAG
ISLAND_SLEEPING = _ISLAND_SLEEPING
WANTS_DEACTIVATION = _WANTS_DEACTIVATION
DISABLE_DEACTIVATION = _DISABLE_DEACTIVATION
DISABLE_SIMULATION = _DISABLE_SIMULATION
Luego, cuando compile su módulo, debe obtener el efecto deseado:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import bullet
>>> bullet.ACTIVE_TAG
1
>>> bullet.DISABLE_SIMULATION
5
>>>