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

#1 Rodrigo Corral González [MVP]
01/03/2004 - 10:14 | Informe spam
Declarala void Funcion2( COleVariant& vt)


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net
Respuesta Responder a este mensaje
#2 Tomás
01/03/2004 - 15:22 | Informe spam
Eso es lo que pensaba, pero al compilar da el siguiente mensaje de error:

error C2664: Funcion2: no se puede convertir el parámetro 1 de '_variant_t'
a 'COleVariant &'
Una referencia a un elemento distinto de 'const' no se puede
enlazar a un elemento que no sea valor L

La funcion esta declarada asi:
void Funcion2(COleVariant& var)

Y se llama asi:
Funcion2(pFields->GetItem("Codigo")->Value);

¿Alguna sugerencia?

Gracias.

"Rodrigo Corral González [MVP]" escribió en el
mensaje news:efjQS22$
Declarala void Funcion2( COleVariant& vt)


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net


Respuesta Responder a este mensaje
#3 Rodrigo Corral González [MVP]
01/03/2004 - 16:48 | Informe spam
Prueba esto:

COleVariant v = pFields->GetItem("Codigo")->Value;
Funcion2(v);

Pero yo lo que haria es declarar la función como :

Declarala void Funcion2( _variant_t& vt);


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net
Respuesta Responder a este mensaje
#4 Tomás
02/03/2004 - 19:37 | Informe spam
Gracias, de esta forma funciona.

Un saludo.

Tomas

"Rodrigo Corral González [MVP]" escribió en el
mensaje news:Oj8BhS6$
Prueba esto:

COleVariant v = pFields->GetItem("Codigo")->Value;
Funcion2(v);

Pero yo lo que haria es declarar la función como :

Declarala void Funcion2( _variant_t& vt);


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net


Respuesta Responder a este mensaje
#5 Tomás
03/03/2004 - 16:29 | Informe spam
Vaya, no funciona.
Si bien ahora el compilador no se queja, la función no actúa como yo
pensaba.

La función debería funcionar así:
void Funcion2(_variant_t& v)
{
// Se asume que el tipo de variant es VT_BSTR
v = _bstr_t("1234");
return;
}

void Funcion1()
{
// Previamente se ha obtenido un conjunto de datos (adOpenKeyset)
FieldsPtr pFields = m_pRecordset->Fields;
Funcion2(pFields->GetItem("Codigo")->Value);

// Llamando al campo "Codigo", pensaba que podria ver "1234"
CString strTemp;
strTemp = (char*)(_bstr_t)pFields->GetItem("Codigo")->Value;

// pero no es así, esta vacío.
TRACE(strTemp);
}

¿Alguien sabe como se puede conseguir esta funcionalidad, o no es posible?

Gracias.

Tomás.




"Rodrigo Corral González [MVP]" escribió en el
mensaje news:Oj8BhS6$
Prueba esto:

COleVariant v = pFields->GetItem("Codigo")->Value;
Funcion2(v);

Pero yo lo que haria es declarar la función como :

Declarala void Funcion2( _variant_t& vt);


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida