Ayuda con el SHBrowseForFolder, que me esta volviendo loco

05/03/2004 - 17:34 por carloshdz | Informe spam
Tengo un pequeño gran problema, ya he conseguido usar el
SHBrowseForFolder en un programilla (gracias a la ayuda inestimable de
la gente de este foro), y ahora lo quiero usar en otro y resulta que
no va ni a tiros. Yo hago lo mismo, lo que pongo abajo, pero me dice
que BROWSEINFO no esta definido, ni LPITEMIDLIST, y claro nada de lo
que ha continuación se hace está bien, Yo he hecho un corta-pega del
anterior programa, y me he vuelto loco pero no encuentro ninguna
librería que tenga el que funciona que le falte a este. De hecho hago
un proyecto nuevo y funciona a las mil maravillas.

¿Alguien sabe que puede ser? Muchas gracias.

Esto es lo que pongo, Dentro de una funcion claro,


...
char PathTmp[MAX_PATH];
CString csPath;
BROWSEINFO Browse;
LPITEMIDLIST lpDirList;
Browse.hwndOwner = NULL;
Browse.pidlRoot = NULL;
Browse.pszDisplayName = PathTmp;
Browse.lpszTitle = "Seleción del directorio";
Browse.ulFlags = 0;
Browse.lpfn = NULL;
Browse.lParam = NULL;
if((lpDirList = SHBrowseForFolder(&Browse)) != (ITEMIDLIST*)NULL)
{SHGetPathFromIDList(lpDirList,PathTmp);
CoTaskMemFree(lpDirList);
csPath = PathTmp;
m_archivosArbol.InsertItem(Browse.pszDisplayName);
m_archivo_secuencia=Browse.pszDisplayName;
UpdateData(FALSE);
}
else csPath = _T("");
return csPath;
}

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral González [MVP]
05/03/2004 - 18:27 | Informe spam
¿Has incluido las cabeceras necesarias en tu proyecto?

Prueba definiendo #define WIN32_LEAN_AND_MEAN


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net
Respuesta Responder a este mensaje
#2 Cholo Lennon
05/03/2004 - 18:38 | Informe spam
Debes incluir el archivo cabecera ShlObj.h. Quizás en tu otro proyecto el
mismo era incluido indirectamente por otro archivo cabecera.

Consejos sobre unicode: Si utilizás las macros de expansión unicode como _T
declara entonces las variables de tipo char como _TCHAR. Con esto te será
muy sencillo pasar de ansi a unicode o viceversa.

Saludos
Cholo Lennon
Salta, ARG
Respuesta Responder a este mensaje
#3 carloshdz
06/03/2004 - 19:26 | Informe spam
Muchas gracias, lo he hecho y ahora no meda errores al compilarlo pero
al apretar el boton, o lo que es lo mismo al llamar a la función, me
aparece la famosa ventanita de "SE ha detectado un problema y debe
cerrarse".

Me estoy volviendo loco por que no entiendo por que ne un proyecto
nuevo, si que funciona y en este no, ¿Puede ser que la inclusion de
alguna librería anule a otra? ¿no verdad?. Estoy repasando linea a
linea las declaraciones pero noencunetro nada.


"Cholo Lennon" wrote in message news:...
Debes incluir el archivo cabecera ShlObj.h. Quizás en tu otro proyecto el
mismo era incluido indirectamente por otro archivo cabecera.

Consejos sobre unicode: Si utilizás las macros de expansión unicode como _T
declara entonces las variables de tipo char como _TCHAR. Con esto te será
muy sencillo pasar de ansi a unicode o viceversa.
Respuesta Responder a este mensaje
#4 Cholo Lennon
06/03/2004 - 21:16 | Informe spam
Me parece que tu problema es con la liberación de memoria. Yo personalmente
lo hago de esta manera:

LPMALLOC pMalloc;

if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(bi));

// Inicializar bi con valores necesarios
...

// Muestro diálogo
if (LPITEMIDLIST pidl = SHBrowseForFolder(&bi))
{
_TCHAR szDir[MAX_PATH];

// Obtengo carpeta desde el pidl
if (SHGetPathFromIDList(pidl, szDir)) {
// Utilizar la carpeta seleccionada (szDir)
...
}
pMalloc->Free(pidl); // libero pidl
}
pMalloc->Release(); // libero interfaz
}


De igual forma necesitaría ver tu código fuente para darte una opinión más
exacta (si es que lo anterior no te funciona).

Saludos
Cholo Lennon
Salta, ARG
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida