Estoy haciendo una aplicación de consola, y tengo un problema, quiero aceptar nombres unicode de los archivos, por si mi aplicación corre en algún windows en chino o algo así.
El asunto es que el main me da problemas:
Código
#define UNICODE #include <windows.h> #include <stdio.h> int main(int argc, TCHAR* argv[]) { if (argc == 2) { HANDLE archivo; int error; archivo = CreateFile(/*TEXT("texto.txt"),*/ argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, // Descriptor de seguridad por defecto OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); error = GetLastError(); if (error != NO_ERROR) { } else { } } else { } return 0; }
Así como está al especificar el nombre de archivo siempre me da error 2 (ERROR_FILE_NOT_FOUND), en cambio si descomento en el código y utilizo un nombre de archivo fijo existente, en este caso: texto.txt no da error.
A mi parecer el main es el que me da problemas, ¿cómo declaro un main que acepte unicode en la entrada?
He probado usando la cmd.exe en modo unicode:
cmd /u
y al especificar un nombre de archivo existente me da error 123 (ERROR_INVALID_NAME)
Entonces pienso que el problema está en la definición del main.
¿Por favor, alguien me puede ayudar? Tengo todo el resto del código listo para trabajar en unicode, pero me falta el poder aceptar un nombre de archivo desde el main, en este caso argv[1]
Estoy compilando con gcc 3.4.2 (mingw) bajo el ide Dev-C++ 4.9
EI: juntando mensajes.
busqué más información y leí que mingw no acepta wmain, así es que escribí esto como parche basado en: http://msdn.microsoft.com/en-us/library/bb776391%28v=VS.85%29.aspx
Código
#ifdef UNICODE int main() #else int main(int argc, UCHAR* argv[]) #endif { #ifdef UNICODE TCHAR** argv; int argc; argv = CommandLineToArgvW(GetCommandLineW(), &argc); if (argv == NULL) { return ERROR_DESCONOCIDO; } #endif int ret; ret = mi_funcion(argv[1]); #ifdef UNICODE LocalFree(argv); #endif return ret; }