Pasar por referencia un COleVariant a una función.

29/02/2004 - 08:08 por Tomás | Informe spam
Hola a todos:

Quisiera pasar un COleVariant a una función para dentro de ésta asignarle un
valor, la duda que tengo es que no sé cómo tengo que declarar la función.

Esta función recibe la referencia de COleVariant y le debe asignar un valor:
void Funcion2( COleVariant vt) ???? aquí no sé como declararlo.
{
CString s;
... (líneas de código)
s=_T("1234");
vt = (_bstr_t)s
}

Esta función llama a la función 2 para pasarle el COleVariant:
void Funcion1()
{
... (líneas de código)
FieldsPtr pFields = m_pRecordset->Fields; // Conjunto de datos obtenido de
la base de datos.
Funcion2(pFields->GetItem("Codigo")->Value);
// De regreso de la funcion2, "Codigo" debería contener "1234".
... (más líneas de código)
}

Espero haberme explicado bien, gracias por anticipado.

Un saludo.

Tomás.

Preguntas similare

Leer las respuestas

#6 Cholo Lennon
03/03/2004 - 19:17 | Informe spam
La función está correcta. Lo que pasa es que GetItem(...)->Value va a la
tabla, obtiene el dato y te lo devuelve en una variable de tipo _variant_t
temporal. Esta variable temporal es pasada a tu función. La variable se
destruye una vez que la función regresa.

FieldsPtr pFields = m_pRecordset->Fields;
Funcion2(pFields->GetItem("Codigo")->Value); // << Aquí se construye el
variant temporal

Para comprobarlo coloca un punto de interrupcion en la llamada a la Funcion2
y activa la ventana de desensamblado. Verás como antes de llamar a la
función se crea el variant y como despues de la llamada se invoca a su
destructor.

La solución pasa por cambiar el parametro de la función a FieldPtr:

void Funcion2(FieldPtr& fld)
{
fld->Value = "1234";
return;
}

Ahora invoca a la funcion como:

Funcion2(pFields->GetItem("Codigo"));

En este ultimo caso, tambien se genera una variable temporal de tipo
FieldPtr, pero esta variable tiene una conexión con la tabla, no así una
variable de tipo _variant_t.
Como verás tambien, si quieres mejorar el rendimiento declara siempre las
variables que vas a usar ya que se generan muchas variables temporales en
las llamadas a funciones (sobre todo si las llamadas estan dentro de un
ciclo. Esto siempre hablando del soporte #import de VC++).

FieldPtr pField = pFields->GetItem("Codigo");
Funcion2(pField);

Saludos
Cholo Lennon
Salta, ARG
Respuesta Responder a este mensaje
#7 Tomás
04/03/2004 - 18:42 | Informe spam
Gracias Cholo.

Efectivamente, es tal cual dices, tendré que pensar en hacerlo de otra
forma.

Te doy las gracias porque con respuestas como estas, con tan buena
información, hacen de este foro un lugar interesante para compartir
información con las personas que estamos aprendiendo este lenguaje.

Un saludo.

Tomás.

"Cholo Lennon" escribió en el mensaje
news:eh48%
La función está correcta. Lo que pasa es que GetItem(...)->Value va a la
tabla, obtiene el dato y te lo devuelve en una variable de tipo _variant_t
temporal. Esta variable temporal es pasada a tu función. La variable se
destruye una vez que la función regresa.

FieldsPtr pFields = m_pRecordset->Fields;
Funcion2(pFields->GetItem("Codigo")->Value); // << Aquí se construye el
variant temporal

Para comprobarlo coloca un punto de interrupcion en la llamada a la


Funcion2
y activa la ventana de desensamblado. Verás como antes de llamar a la
función se crea el variant y como despues de la llamada se invoca a su
destructor.

La solución pasa por cambiar el parametro de la función a FieldPtr:

void Funcion2(FieldPtr& fld)
{
fld->Value = "1234";
return;
}

Ahora invoca a la funcion como:

Funcion2(pFields->GetItem("Codigo"));

En este ultimo caso, tambien se genera una variable temporal de tipo
FieldPtr, pero esta variable tiene una conexión con la tabla, no así una
variable de tipo _variant_t.
Como verás tambien, si quieres mejorar el rendimiento declara siempre las
variables que vas a usar ya que se generan muchas variables temporales en
las llamadas a funciones (sobre todo si las llamadas estan dentro de un
ciclo. Esto siempre hablando del soporte #import de VC++).

FieldPtr pField = pFields->GetItem("Codigo");
Funcion2(pField);

Saludos
Cholo Lennon
Salta, ARG



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida