<div dir="ltr">Hola, <div><br></div><div style>Solo quería darte las gracias y comentar como curiosidad, que la asignación efectivamente solo tiene sentido dentro de la función, en el momento que se termina esa pierde.</div>
<div style><br></div><div style>He probado lo de la variable estática  pero no me termina de convencer ese sistema xD. El método 2 sería estupendo, pero no entiendo porque no me deja asignar un puntero a un char en lugar del array :S.</div>
<div style><br></div><div style>Así que la decisión final que he tomado ha sido esta usar la función strcpy:</div><div style><br></div><div style><div>bool OpenFile(char ** szFileName, int nSizeBuffer )</div><div>{</div><div>
    OPENFILENAME ofn;       // common dialog box structure</div><div>    char szFile[nSizeBuffer];       // buffer for file name</div><div>    HWND hwnd = NULL;       // owner window</div><div>    HANDLE hf;              // file handle</div>
<div><br></div><div>    // Initialize OPENFILENAME</div><div>    ZeroMemory(&ofn, sizeof(ofn));</div><div>    ofn.lStructSize = sizeof(ofn);</div><div>    ofn.hwndOwner = hwnd;</div><div>    ofn.lpstrFile = szFile;</div>
<div>    //</div><div>    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not</div><div>    // use the contents of szFile to initialize itself.</div><div>    //</div><div>    ofn.lpstrFile[0] = '\0';</div>
<div>    ofn.nMaxFile = sizeof(szFile);</div><div>    ofn.lpstrFilter = "Text\0*.TXT\0All\0*.*\0";</div><div>    ofn.nFilterIndex = 1;</div><div>    ofn.lpstrFileTitle = NULL;</div><div>    ofn.nMaxFileTitle = 0;</div>
<div>    ofn.lpstrInitialDir = NULL;</div><div>    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</div><div><br></div><div>    // Display the Open dialog box.</div><div><br></div><div>    if (GetOpenFileName(&ofn)==TRUE)</div>
<div>    {</div><div>        strcpy(*szFileName,szFile);</div><div style>        return true;</div><div>    }</div><div>    else</div><div>    {</div><div>        return false;</div><div>    }</div><div>}</div><div><br></div>
<div style>No me termina de convencer lo de pasar el tamaño del array como variable, pero es que la anterior opción que tome (usar librerias de c++ y devolver un tipo string) tampoco me convence, porque además tengo que dejar el bufer (el tamaño del array que contendrá la dirección) fijo, y es una solución que tampoco me gusta xD.</div>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 19 de abril de 2013 16:53, Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">El pasado 2013-04-19 08:33:56, Hugo García escribió:<br>
<br>
HG> Hola a todos,<br>
<br>
Hola:<br>
<br>
HG> Lo primero de todo pedir disculpas si hago algo mal (me expreso mal), es la<br>
HG> primera vez que consulto una duda en Internet y la primera vez que recurro<br>
HG> a una lista de correo.<br>
<br>
No hay de qué. La verdad es que, al menos yo, prefiero consultas en las que se incluyan muchos detalles, ya que ayuda a orientar mejor las respuestas.<br>
<br>
HG> La cosa es que tal cual está ahora el proyecto, funciona y no da ningún<br>
HG> problema... (quitando el que no puedo pasar un string como parametro a la<br>
HG> función mensajebox, pero eso es otro asunto a tratar) y me gustaría saber<br>
HG> el por que.<br>
<br>
El problema es que estás retornando un puntero a una variable local de la función OpenFile. Un puntero a szFile sólo tiene sentido dentro de la función, y la cadena deja de existir en el momento que se abandona esa función. Por eso el valor retornado contiene "basura".<br>

<br>
A mi modo de ver, además de la solución que has usado que no sé cual es, tienes dos opciones para que esta función devuelve la cadena correctamente:<br>
1) Hacer que szFile sea estática, de este modo la memoria asignada a esa cadena existirá siempre a lo largo de la vida de la aplicación.<br>
2) Que el puntero a la cadena que pases apunte a una cadena válida, y en lugar de usar szFile, usar la cadena que pasas como parámetro en la estructura ofn.<br>
<div class="im"><br>
void OpenFile(char ** szFileName)<br>
{<br>
    OPENFILENAME ofn;       // common dialog box structure<br>
</div>...<br>
     ofn.lpstrFile = *szFileName;<br>
...<br>
<br>
HG> La cosa es que tras hacer la pequeña modificación (que actualmente es como<br>
HG> está el proyecto) de hacer que la función OpenFile te devuelva un string en<br>
HG> lugar de pasar una cadena por referencia me muestra el resultado<br>
HG> correctamente...<br>
<br>
No te puedo decir por qué así funciona, puesto que no sé en qué consiste esa "pequeña modificación".<br>
<br>
HG> Se que indica que a partir de vista es recomendable usar el control common<br>
HG> item dialog, pero es que sin un ejemplo "mascadito como el otro" soy<br>
HG> incapaz de hacer algo... lo mismo es por no usar el control adecuado que no<br>
HG> funciona... no lo se...<br>
<br>
No tiene nada que ver, el API, salvo que se indique lo contrario en la documentación, siempre mantiene la compatibilidad hacia atrás. El método que usas debe funcionar tanto en Windows 8, 7 o Vista, como en XP y 2000. El que propone la documentación sólo funciona a partir de Windows Vista.<br>

<br>
No te prometo nada, ya que no sé si tendré tiempo, pero intentaré hacer algún ejemplo que use el "common item dialog".<br>
<br>
Hasta pronto.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net">salvador@conclase.net</a><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</font></span></blockquote></div><br></div>