<div dir="ltr">Hola a todos,<div><br></div><div style>Lo primero de todo pedir disculpas si hago algo mal (me expreso mal), es la primera vez que consulto una duda en Internet y la primera vez que recurro a una lista de correo.</div>
<div style><br></div><div style>Adjunto el proyecto en el que tengo el problema en cuestión, no obstante procedo a explicarlo con algunas capturas de pantalla para facilitar la comprensión de lo que quiero preguntar.</div>
<div style><br></div><div style>La cosa es que tal cual está ahora el proyecto, funciona y no da ningún problema... (quitando el que no puedo pasar un string como parametro a la función mensajebox, pero eso es otro asunto a tratar) y me gustaría saber el por que.</div>
<div style><br></div><div style>Esta es la documentación que he seguido (junto al curso de winapi porsupuesto).</div><div style><br></div><div style><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx</a><br>
</div><div style><br></div><div style>Se que indica que a partir de vista es recomendable usar el control common item dialog, pero es que sin un ejemplo "mascadito como el otro" soy incapaz de hacer algo... lo mismo es por no usar el control adecuado que no funciona... no lo se...</div>
<div style><br></div><div style>Inicialmente había creado la función OpenFile de la siguiente manera (que tampoco entiendo porque no funciona...):</div><div style><br></div><div style><div>void OpenFile(char ** szFileName)</div>
<div>{</div><div>    OPENFILENAME ofn;       // common dialog box structure</div><div>    char szFile[256];       // 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>        hf = CreateFile(ofn.lpstrFile, GENERIC_READ,</div><div>            0, (LPSECURITY_ATTRIBUTES) NULL,</div><div>            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,</div><div>            (HANDLE) NULL);</div>
<div>        *szFileName = szFile;</div><div>        MessageBox(NULL, *szFileName, "Mensaje de menú", MB_ICONEXCLAMATION | MB_OK);</div><div>    }</div><div>}</div><div><br></div><div style>y la llamaba de la siguiente manera:</div>
<div style><br></div><div style><div>case CM_OPEN:</div><div>                    OpenFile(&szFile);</div><div>                    cout << "la cadena vale" << szFile << endl;</div><div>                    break;</div>
<div><br></div><div style>El resultado que obtenía era este:</div><div style><br></div><div style><img src="cid:ii_13e214e64e70c8de" alt="Imágenes integradas 1" width="535" height="477"><br></div><div style><br></div><div style>
En la alerta que hay en la función la ruta que buscaba se muestra correctamente, pero cuando volvemos al main el resultado es bien distinto...</div><div style><br></div><div style><img src="cid:ii_13e2151a8cf3f602" alt="Imágenes integradas 2"><img width="16" height="16" src="data:image/gif;base64,R0lGODlhEAAQAOUdAOvr69HR0cHBwby8vOzs7PHx8ff397W1tbOzs+Xl5ebm5vDw8PPz88PDw7e3t+3t7dvb2+7u7vX19eTk5OPj4+rq6tbW1unp6bu7u+fn5+jo6N/f3+/v7/7+/ra2ttXV1f39/fz8/Li4uMXFxfb29vLy8vr6+sLCwtPT0/j4+PT09MDAwL+/v7m5ubS0tM7OzsrKytra2tTU1MfHx+Li4tDQ0M/Pz9nZ2b6+vgAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFMAA5ACwAAAAAEAAQAAAGg8CcMAcICAY5QsEwHBYPCMQhl6guGM5GNOqgVhMPbA6y5Xq/kZwkN3Fsu98EJcdYKCo5i7kKwCorVRd4GAg5GVgAfBpxaRtsZwkaiwpfD0NxkYl8QngARF8AdhmeDwl4pngUCQsVHDl2m2iveDkXcZ6YTgS3kAS0RKWxVQ+/TqydrE1BACH5BAkwADkALAAAAAAQABAAAAZ+wJwwJ1kQIgNBgDMcdh6KRILgQSAOn46TIJVSrdZGSMjpeqtgREAoYWi6BFF6xCAJS6ZyYhEIUwxNQgYkFxwBByh2gU0kKRVHi4sgOQuRTRJtJgwSBJElihwMQioqGmw5gEMLKk2AEkSBq4ElQmNNoYG2OVpDuE6Lrzmfp0NBACH5BAUwADkALAAAAAAQABAAAAaFwJwwJ1kQCDlCwTAcMh6KhDQnVSwYTkJ1un1gc5wtdxsh5iqaLbVKyVEWigq4ugZgTyiA9CK/JHIZWCsICCxpVWV/EzkHhAgth1UPQ4OOLXpScmebFA6ELHAZclBycXIULi8VZXCZawplFG05flWlakIVWravCgSaZ1CuksBDFQsAcsfFQQAh+QQJMAA5ACwAAAAAEAAQAAAGQcCccEgsGo/IpHLJzDGaOcKCCUgkAEuFNaFRbq1dJCxX2WKRCFdMmJiiEQjRp1BJwu8y5R3RWNsRBx9+SSsxgzlBACH5BAkwADkALAAAAAAQABAAAAaJwJwwJ1kQCDlCwTAcMh6KhDQnVSwYTkJ1un1gc5wtdxsh5iqaLbVKyTEWigq4ugZglRXpRX5J5DJYAFIAaVVlfhNrURqFVQ9DYhqCgzkzCGdnVQBwGRU0LQiXCRUAORQJCwAcOTChoYplBXIKLq6vUXRCCQ22olUEcroJB66KD8FNCjUrlxWpTUEAIfkEBTAAOQAsAAAAABAAEAAABobAnDAnWRAIOULBMBwyHoqENCdVLBhOQnW6fWBznC13G8nZchXNllql5Bg2xA1cZQOwShwCMdDkLgk5GVgAUgAie3syVDkTbFIaiIkIJ0NiGnp7HiNonRVVAHEuFjlQFVQVAI0JCzYjrKCPZQWnf1unYkMVWrFbBLVoUIaPD8C6CwCnAMhNQQA7"><br>
</div><div style><br></div><div style><br></div><div style>La cosa es que tras hacer la pequeña modificación (que actualmente es como está el proyecto) de hacer que la función OpenFile te devuelva un string en lugar de pasar una cadena por referencia me muestra el resultado correctamente...</div>
<div style><br></div><div style><img src="cid:ii_13e21573d080c72c" alt="Imágenes integradas 3"><br></div><div style><br></div><div style>Y no entiendo porque así si, y de la manera original que debe ser la correcta para hacer un programa escrito puramente en c no funciona...</div>
<div style><br></div><div style>Bueno, espero haber sabido transmitir mi problema y que alguien me pueda responder.</div><div style><br></div><div style>Un saludo.</div></div></div></div>