Muy util CMap y su Lookup

13/04/2005 - 00:22 por Josemi Antelo | Informe spam
¡Hola!

Me ha pasado algo curioso que no encuentro explicación. Te cuento.
Tengo una función en la que registro en una variable datos de la
siguiente forma

CMap <_TCHAR *,_TCHAR *, PROPVARIANT, PROPVARIANT &>
m_Propiedad;

m_Propiedad[sps.lpwstrName] = propVar[0]; Siendo
propVar[0] un PROPVARIANT y el sps.lpwstrName un string.

Bien, hasta aquí todo va bien hasta que llegamos al punto de recoger
el dato en función de su clave:

if (! m_Propiedad.Lookup (_T("Diamante"), pp)) return (false);
Despues de comprobar que dicha clave está definida en m_Propiedad y que la
busqueda es totalmente infructuosa por parte del Lookup, se me ocurre
recorrer el array mediante:

for (pos = m_Propiedad.GetStartPosition(); pos != NULL;)
m_Propiedad.GetNextAssoc (pos, key2, pp);

hago la misma busqueda, pero ahora con el key2 recogido.

if (! m_Propiedad.Lookup (key2, pp)) return (false);

La sorpresa es que de esta forma funciona de vicio.

Indago mas y mas y compruebo que al hacer la busqueda con el lookup, primero
se practica una ¿fantastica? operación sobre la dirección del puntero de la
variable (key2) con un tal hashkey, y claro, la única forma de que el lookup
de con el elemento deseado es mediante la dirección a la cual apunta. muy
util ¿no?, puessssssssssssssss no, o sea que no puedo hacer busquedas del
tipo
if (! m_Propiedad.Lookup (_T("Diamante"), pp)) return (false);

key = _T("Diamante");
if (! m_Propiedad.Lookup (key, pp)) return (false);

Muy útil, si, muy util
 

Leer las respuestas

#1 jose
13/04/2005 - 13:16 | Informe spam
Hola Josemi,

El problema está en la Key que has definido es un puntero cuando en
realidad lo que te interesa es que la Key se refiera al contenido.

Si sustituyes la definición del CMap por:
CMap< CString, LPCSTR, PROPVARIANT, PROPVARIANT & > m_Propiedad;
debería funcionar tal y como deseas.

Espero que te sirva.

Saludos,

Jose

"Josemi Antelo" wrote in
news::

¡Hola!

Me ha pasado algo curioso que no encuentro explicación. Te cuento.
Tengo una función en la que registro en una variable datos de la
siguiente forma

CMap <_TCHAR *,_TCHAR *, PROPVARIANT, PROPVARIANT &>
m_Propiedad;

Preguntas similares