elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con visual estudio usando GetModuleFileName();
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con visual estudio usando GetModuleFileName();  (Leído 1,750 veces)
Roast D

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Problema con visual estudio usando GetModuleFileName();
« en: 2 Marzo 2017, 16:17 pm »

Estoy creando una funcion para copiar y pegar un ejecutable en una parte de windows. La cuestion es que en dev C++ las apis que usaba haceptaban buffer de tipo char*. En visual me pide parametros de tipo lpwstr.

Código
  1. char buffer[256];
  2. HMODULE exe = GetModuleHandle(0);
  3. GetModuleFileName(exe, (LPWSTR)buffer, 256);
  4. cout<<buffer<<endl;
  5.  
Imprimi en consola el resultado de buffer y lo unico que se ve de la ruta es C. No se copia toda la ruta al buffer. Que debería hacer ?. En dev c++ solo tenia que pasar lo siguiente.

Código
  1. char buffer[256];
  2. HMODULE exe = GetModuleHandle(0);
  3. GetModuleFileName(exe, buffer, 256);
  4. cout<<buffer<<endl;
  5.  

Que tipo de variable debo delcarar el buffer para obtener la ruta de mi exe.

Una de las cosas que vi, es que se usan buffer del tipo wchar_t. Que no estoy seguro de como usarlos, si alguien me puede poner un ejemplo le agradezco.


« Última modificación: 2 Marzo 2017, 18:53 pm por engel lex » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con visual estudio usando GetModuleFileName();
« Respuesta #1 en: 2 Marzo 2017, 18:08 pm »

TCHAR puede ser wchar_t o char, según. Puedes comprobarlo con:

Código
  1. #include <typeinfo>
  2. #include <iostream>
  3. #include <windows.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8. cout << "char: " << typeid(char).name() << endl;
  9. cout << "wchar_t: " << typeid(wchar_t).name() << endl;
  10. cout << "TCHAR: " << typeid(TCHAR).name() << endl;
  11. }

En mi caso, siendo TCHAR un char, me funciona correctamente.

Definiendo "UNICODE", entonces pasa a wchar_t, y el programa quedaría:

Código
  1. #define UNICODE
  2.  
  3. #include <typeinfo>
  4. #include <iostream>
  5. #include <windows.h>
  6.  
  7. using namespace std;
  8.  
  9. int main(){
  10. wchar_t buffer[256];
  11. HMODULE exe = GetModuleHandle(0);
  12. GetModuleFileName(exe, buffer, 256);
  13. wcout << buffer << endl;
  14. }

Nótese que el array ahora es de wchar_t, y que en vez de cout, utilizo wcout. En vez de array de wchar_t también podrías usar array de TCHAR. Sin embargo, te interesa saber en cada caso si es wchar_t o char, así que ponerlo manualmente te librará de problemas.


En línea

Roast D

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Problema con visual estudio usando GetModuleFileName();
« Respuesta #2 en: 2 Marzo 2017, 18:32 pm »

Si justo acabo de ver mi error. Se trabaja con unicode y no con ascci. Asi que la cuestion de la memoria cambia. Gracias :3.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines