C/Visual C - SHBrowseForFolder ERROR

 
Vista:

SHBrowseForFolder ERROR

Publicado por /***** VIRTUAJATS *****/ (18 intervenciones) el 08/01/2003 23:33:54
En Dev-Cpp me sale el mensaje de error:
implicit declaration of function `int SHBrowseForFolder(...)'.
me sale con esa función y con todas sus estructuras como BROWSEINFO y BIF_NEWDIALOGSTYLE.
De antemano digo que ya he declarado windows.h y se supone que este header incluye a shlobj.h, el header en el cual está todo el sitema SHBrowseForFolder.

¿QUE ESTÁ OCURRIENDO?

Yo usaba esta función en un programa que había desarrollado en VB y la traduje a C. Este es el Resultado:
<<<<Código de la función en C>>>>:
void dlgFolders(HWND hwnd, char Mensaje[], char *szResult) {
BROWSEINFO bi;
long pidl;
int pos;

bi.hOwner = hwnd;
bi.pidlRoot = 0x0;
bi.lpszTitle = Mensaje;
bi.ulFlags = BIF_RETURNONLYFSDIRS;

pidl = SHBrowseForFolder(bi);
char path[MAX_PATH];

if(SHGetPathFromIDList(pidl, path)) {
pos = ??? //InStr(path, Chr$(0)); No se como traducir esta linea, HELPME!
strcopy(szResult, path, pos - 1, sizeof(path)-(pos-1));
}
CoTaskMemFree(pidl);
}
<<<<FIN>>>>

GRACIAS...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:SHBrowseForFolder ERROR

Publicado por Endos (58 intervenciones) el 09/01/2003 00:15:24
Tiene muchos errores tu código y olvidas hacer varias cosas.
Mira este ejemplo:

void Browse(char *Text,char *Result,HWND hwnd)
{
BROWSEINFO bi;
LPSTR lpBuffer;
LPITEMIDLIST pidlPrograms; // PIDL for Programs folder
LPITEMIDLIST pidlBrowse; // PIDL selected by user
LPMALLOC g_pMalloc;

if(!SUCCEEDED(SHGetMalloc(&g_pMalloc))) // Get memory
return;

// Allocate a buffer to receive browse information.
if((lpBuffer=(LPSTR)g_pMalloc->Alloc(MAX_PATH+1))==NULL)
return;

// Get the PIDL for the Programs folder.
if(!SUCCEEDED(SHGetSpecialFolderLocation(hwnd,CSIDL_DESKTOP,&pidlPrograms)))
{
g_pMalloc->Free(lpBuffer);
return;
}

// Fill in the BROWSEINFO structure.
bi.hwndOwner=hwnd;
bi.pidlRoot=pidlPrograms;
bi.pszDisplayName=lpBuffer;
bi.lpszTitle=Text;
bi.ulFlags=BIF_NEWDIALOGSTYLE;
bi.lpfn=NULL;
bi.lParam=0;

CoInitialize(NULL); // Init for Version 5.0 capabilities

// Browse for a folder and return its PIDL.
pidlBrowse=SHBrowseForFolder(&bi);

if(pidlBrowse!=NULL)
{
if(SHGetPathFromIDList(pidlBrowse, lpBuffer))
strcpy(Result,lpBuffer);

// Free the PIDL returned by SHBrowseForFolder.
g_pMalloc->Free(pidlBrowse);
}

// Clean up.
g_pMalloc->Free(pidlPrograms);
g_pMalloc->Free(lpBuffer);

return;
}

// Llamada de ejemplo
char *Titulo="Prueba";
char Resultado[MAXPATH+1];

Browse(Titulo,&Resultado,NULL);

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona, es extraño.

Publicado por /**** VIRTUAJATS ****/ (18 intervenciones) el 09/01/2003 04:20:04
Creo que el código que me pasaste está bien, pero sigue con el problema de antes mira:
_________________________
_ |REGISTRO DE COMPILACIÓN|_________________________
<<<<<25 ERRORES>>>>>
C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\Makefile.win
[Build Error] [main.o] Error 1

____________
_ |COMPILADOR|_________________________
C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
[Warning] In function `void Browse(char *, char *, HWND__ *)':
102 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`BROWSEINFO' undeclared (first use this function)
(Each undeclared identifier is reported only once
for each function it appears in.)
102 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
parse error before `;'
104 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`LPITEMIDLIST' undeclared (first use this function)
104 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
parse error before `;'
108 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`g_pMalloc' undeclared (first use this function)
112 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int gtAlloc(...)'
112 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
non-lvalue in unary `&'
116 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`CSIDL_DESKTOP' undeclared (first use this function)
116 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`pidlPrograms' undeclared (first use this function)
116 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int SHGetSpecialFolderLocation(...)'
118 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int gtFree(...)'
118 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
non-lvalue in unary `&'
123 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`bi' undeclared (first use this function)
127 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`BIF_NEWDIALOGSTYLE' undeclared (first use this function)
131 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int CoInitialize(...)'
134 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
`pidlBrowse' undeclared (first use this function)
134 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int SHBrowseForFolder(...)'
138 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int SHGetPathFromIDList(...)'
147 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
non-lvalue in unary `&'
C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
[Warning] In function `BOOL dlgEDLEDProc(HWND__ *, unsigned int, unsigned int, long int)':
294 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
passing `char (*)[261]' as argument 2 of `Browse(char *, char *, HWND__ *)'
302 C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\main.cpp
implicit declaration of function `int dlgFolders(...)'
C:\JATSFILES\Programacion\c++\my sources\Speed Excecute\Makefile.win
[Build Error] [main.o] Error 1
_______________________________________________________

¿PORQUE SUCEDE ESTO?
Bueno, si esta informacion no te es suficiente, si quieres te puedo pasar el proyecto por E-Mail...

Salu2 y Gracias por todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No funciona, es extraño.

Publicado por Endos (58 intervenciones) el 09/01/2003 14:15:09
1- Incluye los prototipos: #include <shlobj.h> y todos los que se necesiten.
2- Este foro tiene la costumbre de cambiar el signo "mayor que" por un "&" , seguramente en la linea "1-" ya lo ha cambiado en ese include... En los "g_pMalloc-&" ese "&" es un puntero ("mayor que") y no una resta rara...

Si alguna funcion, define o lo que sea no lo encuentra, es porque necesitas hacer el #include del archivo de cabecera que lo define.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ya lo hice, y no es eso...

Publicado por VIRTUAJATS (18 intervenciones) el 10/01/2003 01:32:01
En el mensaje anterior se me olvidó mencionarte que ya había incluido a shlobj.h, pero lo más RARO es que me dice que este fichero YA HABÍA SIDO DECLARADO, y me imagino que esto lo hace el windows.h NO?.

Bueno te enviaré por E-Mail el proyecto ya que no aguanto más con este pequeño gran problema ^_^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ya lo hice, y no es eso...

Publicado por Endos (58 intervenciones) el 16/01/2003 19:53:52
Mi correo como supongo habras ya comprobado no es real, para evitar el desagradable spam...
Tu problema es algun detalle con los archivos de encabezado. Probablemente cuando defines en include lo haces desde un .h y se incluye mas de una vez de ahi tu problema.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar