[C con Clase] Ayuda Obtener El Path De La Aplicación (GetAppPath Y CString?)

D1e6o! diegogeid en gmail.com
Jue Mar 15 22:49:08 CET 2007


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!
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!!!

El día 15/03/07, Steven Davidson <steven en conclase.net> escribió:
>
> Hola Diego,
>
> El pasado 2007-03-15 04:01:17, D1e6o! escribió:
>
> D> Hola gente, acá estoy con un problema:
> D> Estoy intentando conocer el path de la aplicación, pero no lo logro.
> Por lo
> D> que tengo entendido debo usar la siguiente función:
> D> CString GetAppPath ()
> D> {
> D> TCHAR app_path[_MAX_PATH];
> D> GetModuleFileName((HMODULE)AfxGetApp()->m_hInstance, app_path,
> MAX_PATH);
> D> CString app_str = app_path;
> D> app_str = app_str.Left(app_str.ReverseFind('\\')+1);
> D> return app_str;
> D> }
> D> El problema es que no entiendo que es eso de CString, alguien me lo
> podría
>
> '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.
>
> D> aclarar? Y por estar más acostumbrado a c que a c++, no se que es eso
> de
> D> app_str.left... app_str.ReverseFind('\\')+1)? Todo esto está en la
> clase
>
> 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.
>
> Usando las funciones de ANSI C, lo anterior equivaldría a lo siguiente:
>
> char szApp[_MAX_PATH];
> strncpy( szApp, szRuta, strrchr(szRuta,'\\')-szRuta+1 );
>
> Para saber más de éstas y otras funciones en <cstring> (o <string.h>),
> consulta la referencia en nuestra página yendo a:
> http://c.conclase.net/librerias/libreria.php?lib=string
>
> D> cstring la cual no está en dev c++ no? (stdafx.h)
>
> 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>.
>
> Por si te interesa, diré que la clase estándar 'string' y la plantilla
> 'basic_string<>' se definen en el fichero de cabecera <string>.
>
> D> Hay alguna forma de no utilizar la mfc?...
>
> 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.
>
>
> 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,
>
> TCHAR szApp[_MAX_PATH];
> TCHAR szRuta[_MAX_PATH];
>
> _tcsncpy( szApp, szRuta, _tcsrchr(szRuta,_T('\\'))-szRuta+1 );
>
> Estas funciones no estándares se definen en <tchar.h>, que realmente son
> macros. Tales macros se definen como las funciones 'strrchr()' o
> 'wcsrchr()'.
>
> Por si necesitas saberlo, éste es el prototipo de 'GetFileModuleName()':
>
> DWORD GetModuleFileName(
>   HMODULE hModulo,         // manipulador al módulo
>   LPTSTR lpNombreFichero,  // array para la ruta
>   DWORD nCantidad          // tamaño del array
> );
>
> 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.
>
> 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:
>
> *strrchr( szRuta, '\\' ) = 0;
>
>
> Espero que todo esto te ayude.
>
> Steven
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070315/2033ce42/attachment.html>


Más información sobre la lista de distribución Cconclase