Foros del Web » Programando para Internet » Python »

Pasar un objeto desconocido por referencia

Estas en el tema de Pasar un objeto desconocido por referencia en el foro de Python en Foros del Web. Hola, Estoy intentando usar una funcion en C con ctypes que tiene 2 argumentos: funcion (handle,data) y obviamente en data tienes que meter un objeto ...
  #1 (permalink)  
Antiguo 16/02/2012, 07:33
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 15 años, 7 meses
Puntos: 0
Pasar un objeto desconocido por referencia

Hola,

Estoy intentando usar una funcion en C con ctypes que tiene 2 argumentos:

funcion (handle,data)

y obviamente en data tienes que meter un objeto que va a ser rellenado por la funcion, pero el tema es que no puedo pasar una variable por referencia a una funcion sin haberla declarado antes, es decir que tengo algo como esto:

Cita:
data=None
function(handle,data) -> me da error de acess violation :S
data.x
data.y
data.z
Hay alguna manera de pasar una variable en python por referencia sin conocer el objeto en cuestion? O reservar espacio para la variable? O sino hay otra forma de hacerlo?

Muchas gracias

Última edición por Harchet; 16/02/2012 a las 07:38
  #2 (permalink)  
Antiguo 16/02/2012, 08:47
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar un objeto desconocido por referencia

El access violation es entendible, seguramente la función no espera NULL como dato
Habría que ver de qué función se trata, pero ¿no podrás usar alguna otra función en la biblioteca que te permita crear el objeto que necesitás?

Python no maneja la memoria tan directamente como para permitirte hacer eso, tendrás que jugar con las reglas de C en este caso.
  #3 (permalink)  
Antiguo 16/02/2012, 09:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Pasar un objeto desconocido por referencia

Si tienes razon. Pensaba que habria una solucion magica para esto.
Lo acabo de solucionar, basicamente ctypes te permite crear estructuras comos las que tienes en c, lo que he hecho basicamente es crear una estructura igual a la que tengo en mi .h crear el objeto y pasarselo por referencia usando ctypes.byref(), algo asi:
Código:
class Nombre_structura(ctypes.Structure):
    _fields_=[('variable1', ctypes.c_int*4),('_variable1', ctypes.c_byte)
                   ....
                   ]

data=Nombre_structura()
funcion(ctypes.byref(data))
Muchas gracias de todas maneras.

Etiquetas: objeto, referencia, usar, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:44.