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.
char buffer[256];
HMODULE exe = GetModuleHandle(0);
GetModuleFileName(exe, (LPWSTR)buffer, 256);
cout<<buffer<<endl;
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.
char buffer[256];
HMODULE exe = GetModuleHandle(0);
GetModuleFileName(exe, buffer, 256);
cout<<buffer<<endl;
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.
TCHAR puede ser wchar_t o char, según. Puedes comprobarlo con:
#include <typeinfo>
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
cout << "char: " << typeid(char).name() << endl;
cout << "wchar_t: " << typeid(wchar_t).name() << endl;
cout << "TCHAR: " << typeid(TCHAR).name() << endl;
}
En mi caso, siendo TCHAR un char, me funciona correctamente.
Definiendo "UNICODE", entonces pasa a wchar_t, y el programa quedaría:
#define UNICODE
#include <typeinfo>
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
wchar_t buffer[256];
HMODULE exe = GetModuleHandle(0);
GetModuleFileName(exe, buffer, 256);
wcout << buffer << endl;
}
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.
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.