Hola! Si, obviamente que me sirvió y mucho...! Muchas Gracias como siempre te digo capo...! Tanto por esta ayuda como las demás que son enormes!<br>Que más podría preguntar? Me sacaste tdas las dudas al respecto. Un saludo enorme...! Y con lo de GetFileModuleName ya está clarísimo todo. Muchísimas gracias de nuevo!!!
<br><br><div><span class="gmail_quote">El día 15/03/07, <b class="gmail_sendername">Steven Davidson</b> <<a href="mailto:steven@conclase.net">steven@conclase.net</a>> escribió:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola Diego,<br><br>El pasado 2007-03-15 04:01:17, D1e6o! escribió:<br><br>D> Hola gente, acá estoy con un problema:<br>D> Estoy intentando conocer el path de la aplicación, pero no lo logro. Por lo<br>D> que tengo entendido debo usar la siguiente función:
<br>D> CString GetAppPath ()<br>D> {<br>D> TCHAR app_path[_MAX_PATH];<br>D> GetModuleFileName((HMODULE)AfxGetApp()->m_hInstance, app_path, MAX_PATH);<br>D> CString app_str = app_path;<br>D> app_str = app_str.Left(app_str.ReverseFind('\\')+1);
<br>D> return app_str;<br>D> }<br>D> El problema es que no entiendo que es eso de CString, alguien me lo podría<br><br>'CString' es una clase basada en la plantilla 'CStringT<>', que se define en <
cstringt.h>. Ten presente que todo esto no es estándar, ya que forma parte de las MFC, las cuales son propias de Microsoft. Básicamente, 'CString' se parece a la clase estándar 'string' de ANSI C++. Estas clases encapsulan el concepto de una cadena de caracteres que crece dinámicamente y agrupa las funciones básicas para usar y manipular cadenas.
<br><br>D> aclarar? Y por estar más acostumbrado a c que a c++, no se que es eso de<br>D> app_str.left... app_str.ReverseFind('\\')+1)? Todo esto está en la clase<br><br>La función miembro 'Left()' sirve para obtener una subcadena contando n caracteres desde la izquierda. La función miembro 'ReverseFind()' sirve para encontrar un carácter en una cadena empezando desde atrás hacia al principio.
<br><br>Usando las funciones de ANSI C, lo anterior equivaldría a lo siguiente:<br><br>char szApp[_MAX_PATH];<br>strncpy( szApp, szRuta, strrchr(szRuta,'\\')-szRuta+1 );<br><br>Para saber más de éstas y otras funciones en <cstring> (o <
string.h>), consulta la referencia en nuestra página yendo a: <a href="http://c.conclase.net/librerias/libreria.php?lib=string">http://c.conclase.net/librerias/libreria.php?lib=string</a><br><br>D> cstring la cual no está en dev c++ no? (
stdafx.h)<br><br>Bueno, esto ya lo he explicado, pero detallaré un poco más. El fichero de cabecera <string.h> es de ANSI C, pero también tiene el nombre de <cstring> bajo ANSI C++. La clase no estándar 'CString' al igual que la plantilla 'CStringT<>' existen bajo el fichero <
cstringt.h>.<br><br>Por si te interesa, diré que la clase estándar 'string' y la plantilla 'basic_string<>' se definen en el fichero de cabecera <string>.<br><br>D> Hay alguna forma de no utilizar la mfc?...
<br><br>Dev-C++ no usa MFC, sino el API de MS-Windows, en C. Es posible que exista alguna biblioteca para Mingw32 que implemente las MFC.<br><br><br>En cuanto al código que has expuesto, simplemente modifícalo para usar arrays de 'TCHAR'. La función equivalente a 'strrchr()' para cadenas de 'TCHAR' es '_tcsrchr()'. Esto es,
<br><br>TCHAR szApp[_MAX_PATH];<br>TCHAR szRuta[_MAX_PATH];<br><br>_tcsncpy( szApp, szRuta, _tcsrchr(szRuta,_T('\\'))-szRuta+1 );<br><br>Estas funciones no estándares se definen en <tchar.h>, que realmente son macros. Tales macros se definen como las funciones 'strrchr()' o 'wcsrchr()'.
<br><br>Por si necesitas saberlo, éste es el prototipo de 'GetFileModuleName()':<br><br>DWORD GetModuleFileName(<br>  HMODULE hModulo,         // manipulador al módulo<br>  LPTSTR lpNombreFichero,  // array para la ruta
<br>  DWORD nCantidad          // tamaño del array<br>);<br><br>Si 'hModulo' es nulo, entonces tomará el módulo actual. En el código anterior, éste consigue y pasa la instancia de la aplicación como el módulo.<br>
<br>El resto del código sirve para eliminar el último carácter '\' de la cadena. Para eso, simplemente sustituye '\\' por el carácter nulo. O sea, el código se reduciría a lo siguiente:<br><br>*strrchr( szRuta, '\\' ) = 0;
<br><br><br>Espero que todo esto te ayude.<br><br>Steven<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">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">
http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br>